ASP.NET读取CSV文件时出现Failed to fetch错误求助
问题解决方案
一、Swagger返回"Failed to fetch"错误的解决方法
1. 修正CORS中间件顺序
Asp.Net Core中间件执行顺序直接影响功能生效,当前你的UseCors位置不符合规范,需调整到UseHttpsRedirection之后、UseAuthorization之前,同时补充允许HTTP方法和请求头,避免表单提交触发额外CORS校验:
if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // 调整位置并补充完整CORS规则 app.UseCors(builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); app.UseAuthorization(); app.MapControllers();
2. 解决CSV读取的延迟加载问题
CsvReader.GetRecords<T>()是延迟执行的逻辑,当你返回Ok(dataFromFile)时,请求上下文已结束,IFormFile的流会被自动释放,导致实际枚举数据时失败。需提前将数据加载到内存:
[HttpPost("read-csv")] public async Task<IActionResult> GetCSV([FromForm] IFormFileCollection file) { // 提前将数据转为List,避免流释放后无法读取 var dataFromFile = _csvService.ReadCSV<Values>(file[0].OpenReadStream()).ToList(); return Ok(dataFromFile); }
同时确保Values类的属性与CSV列名匹配(可通过[Name]特性指定映射关系),否则CsvHelper无法完成数据映射。
3. 校验launchSettings协议配置
确认launchSettings.json中applicationUrl仅使用http或https协议,比如:
"applicationUrl": "https://localhost:5001;http://localhost:5000"
访问Swagger时需使用与接口请求一致的协议,避免跨协议触发CORS错误。
二、Visual Studio崩溃后程序立即停止的原因
这是调试模式下的正常行为:通过Visual Studio调试启动应用时,程序由VS的调试器进程托管。一旦VS崩溃,调试器进程终止,被托管的应用会失去运行依赖,因此立即停止。
若需让应用在VS崩溃后继续运行,可选择:
- 直接运行发布后的应用程序(执行
dotnet publish生成的可执行文件) - 在终端使用
dotnet run命令启动应用,而非通过VS调试启动
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

