如何解决Blazor中HttpGet请求GetBgQuizAnswerFirst失效问题?
问题分析与解决
核心问题
报错'<' is an invalid start of a value说明客户端尝试解析JSON时,接收到的却是HTML内容(通常是404错误页或服务器错误页,HTML以<开头)。而断点无法触发,证明请求根本没有命中GetBgQuizAnswerFirst这个Action,路由匹配失败是根本原因。
排查与修复步骤
检查控制器的路由前缀
确认你的BgQuizAnswerController类上是否添加了正确的路由前缀,比如:[Route("api/[controller]")] public class BgQuizAnswerController : ControllerBase { // ...你的Action代码 }如果控制器没有这个前缀,客户端请求的
api/BgQuizAnswer/GetBgQuizAnswerFirst路径就无法匹配到Action,会返回404 HTML页面。验证路由匹配情况
用Postman或浏览器直接请求两个接口:- 正常接口:
GET /api/BgQuizAnswer/GetBgQuizAnswer - 异常接口:
GET /api/BgQuizAnswer/GetBgQuizAnswerFirst
观察返回内容,如果异常请求返回HTML页面,说明路由确实没匹配上。
- 正常接口:
检查路由冲突或拼写问题
- 确认项目中没有其他地方定义了相同的
GetBgQuizAnswerFirst路由(比如其他控制器的Action) - 核对路由名称的大小写:部分服务器配置会区分路由大小写,确保客户端请求路径和Action路由的大小写完全一致
- 确认项目中没有其他地方定义了相同的
直接指定完整路由(备选方案)
给异常的Action直接指定完整路由,避免前缀拼接问题:[HttpGet("api/BgQuizAnswer/GetBgQuizAnswerFirst")] public ActionResult<BgQuizAnswer> GetBgQuizAnswerFirst() { BgQuizAnswer retVal = null; _bgQuizAnswerService.Reset(); if (_bgQuizAnswerService.MoveNext()) retVal = _bgQuizAnswerService.Current; if (retVal != null) { return Ok(retVal); } else { return NotFound(); } }确认路由配置启用
在Program.cs(或Startup.cs)中确保启用了属性路由:app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); // 启用属性路由 });
补充说明
虽然两个Action逻辑完全一致,但路由匹配是独立的。只要路由没正确映射,请求就会落到错误处理页,返回HTML而非预期的JSON,进而触发客户端的解析错误。
内容的提问来源于stack exchange,提问作者Hal Heinrich
相关产品推荐
相关产品推荐

