后端无报错但Ajax返回正确数据却触发error回调且状态为404
问题根因
你遇到的是服务端方法执行正常,但响应状态码被框架/中间件篡改为404的情况,常见原因有路由不匹配、控制器类型与返回值不兼容、AJAX参数配置错误三类。
解决方案
- 确认控制器类型与路由配置匹配
首先检查你的SceneList控制器的父类:- 如果继承自
System.Web.Mvc.Controller(MVC控制器):默认路由规则不带/api前缀,你需要调整AJAX的url为/SceneList/SceneListUpdated?sceneId=+ sceneIdAux,或者确认RouteConfig.cs中特意为MVC控制器配置了/api/test前缀的路由规则。 - 如果继承自
System.Web.Http.ApiController(Web API控制器):不能使用MVC专属的JsonResult作为返回值,需要修改方法返回值为IHttpActionResult,返回时改为return Ok(new { Success = true, data = model });、return Ok(new { Success = false, data = "" });,Web API会自动完成JSON序列化并设置200状态码。
- 如果继承自
- 补充请求谓词声明
在SceneListUpdated方法上添加[HttpGet]特性,显式声明该方法接受GET请求,避免框架谓词校验失败篡改状态码。 - 修正AJAX请求参数
- 删除
contentType: "application/json; charset=utf-8"配置:GET请求没有请求实体,不需要指定内容类型,错误的头可能触发服务端额外校验。 - 把参数
datatype修正为dataType:jQuery的AJAX参数大小写敏感,拼写错误会导致返回的JSON无法被正确识别。
- 删除
- 配置IIS不篡改响应
如果上述修改后仍有问题,在项目web.config的<system.webServer>节点下添加配置:
避免IIS默认的错误页规则修改你的响应状态码。<httpErrors existingResponse="PassThrough" />
内容的提问来源于stack exchange,提问作者Fernando Feks
相关产品推荐
相关产品推荐

