.NET 6 MVC中Ajax POST请求控制器Action返回404错误排查
解决MVC .NET 6中AJAX POST请求404错误的问题
核心问题分析
AJAX调用控制器Action时返回404、断点未触发,直接原因是请求URL格式错误,同时还存在返回类型与AJAX配置不匹配的问题。
具体解决方案
1. 修正AJAX请求的URL格式
MVC默认路由规则是 控制器名称/动作方法名称,你当前写的"GetThingsContaining/MyController"完全搞反了顺序,这是404的主要原因。建议使用根路径开头的绝对路径,避免相对路径带来的问题。
修正后的JavaScript代码:
function GetThingsContaining() { $.ajax({ type: "POST", url: "/MyController/GetThingsContaining", // 修正为正确的路由顺序 data: { searchCriteria: "afd" }, dataType: "html", // 改为html,因为Action返回的是PartialView(HTML内容) success: function (data) { // 示例:将返回的PartialView内容插入到页面指定元素中 // $("#searchResultContainer").html(data); }, error: function (xhr, status, error) { console.log("错误详情: " + error); // 用控制台日志更便于调试 alert("Well that stinks"); } }); }
2. 匹配返回类型与AJAX的dataType配置
你的Action返回的是PartialView(HTML格式的视图内容),但原AJAX代码设置了dataType: "json",这会导致请求成功后解析数据失败,必须改为dataType: "html"。
3. 验证控制器与Action的配置
确保控制器类命名正确(必须以Controller结尾,比如MyController),且Action的[HttpPost]特性正确:
public class MyController : Controller { [HttpPost] public IActionResult GetThingsContaining(string searchCriteria) { // 补充returnModel的业务逻辑,例如从数据库查询数据 var returnModel = new List<YourDataModel>(); // 替换为实际的模型类型 return PartialView("~/Views/Investments/_SearchDataList.cshtml", returnModel); } }
如果项目使用了属性路由,需要给Action添加路由特性:
[HttpPost] [Route("MyController/GetThingsContaining")] public IActionResult GetThingsContaining(string searchCriteria) { // ... }
4. 确认参数绑定有效性
当前的POST请求使用默认的表单编码格式(application/x-www-form-urlencoded),参数searchCriteria不需要额外添加[FromBody]特性,原代码的参数绑定方式是有效的。如果后续需要用JSON格式传参,才需要添加[FromBody]并在AJAX中设置contentType: "application/json"。
内容的提问来源于stack exchange,提问作者ItsDataMiner
相关产品推荐
相关产品推荐

