Flutter调用.NET Core 6 WebApi拉取SQL Server数据遇FormatException求助
解决Flutter调用.NET Core 6 WebApi拉取SQL Server数据时的FormatException错误
核心原因
这个FormatException: Unexpected character (at character 1)错误,本质是Flutter尝试解析JSON时,收到的响应根本不是有效JSON——可能是HTML错误页面、纯文本报错信息,或者WebApi返回格式不对。
排查及解决步骤
1. 先确认WebApi的实际返回内容
在Flutter请求代码里,先打印原始响应体,别直接解析JSON:
final response = await http.get(Uri.parse('你的API接口地址')); print('状态码:${response.statusCode}'); print('原始响应:${response.body}');
运行后查看控制台输出,大概率能定位问题:比如返回的是.NET默认的500错误HTML页面,或者SQL查询报错的文本信息,这些非JSON内容会直接导致解析失败。
2. 修复WebApi端的问题
- 验证SQL查询有效性:在WebApi控制器方法中添加日志或断点,确认从SQL Server获取的数据正常,没有抛出异常。
- 强制返回JSON格式:给控制器方法加上
[Produces("application/json")]特性,确保返回内容为JSON;错误场景下也要返回JSON格式的报错信息,避免默认HTML页面:[HttpGet] [Produces("application/json")] public IActionResult GetData() { try { var data = _dbContext.YourTable.ToList(); return Ok(data); } catch (Exception ex) { return StatusCode(500, new { error = ex.Message }); } } - 配置全局错误处理:如果.NET Core抛出异常时返回默认HTML错误页,改成统一返回JSON:
在Program.cs中添加:app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { context.Response.ContentType = "application/json"; var exceptionFeature = context.Features.Get<IExceptionHandlerPathFeature>(); var errorMsg = exceptionFeature?.Error?.Message ?? "未知错误"; await context.Response.WriteAsJsonAsync(new { error = errorMsg }); }); });
3. 调整Flutter端请求逻辑
- 指定接收JSON格式:请求头中添加
Accept: application/json,明确告知WebApi返回JSON:final response = await http.get( Uri.parse('你的API接口地址'), headers: {'Accept': 'application/json'}, ); - 先判断状态码再解析:不要忽略状态码直接硬解析,先处理错误场景:
if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); // 处理业务数据 } else { print('请求出错:${response.body}'); // 根据返回的错误信息做对应处理 }
内容的提问来源于stack exchange,提问作者Mahmut BULMUS
相关产品推荐
相关产品推荐

