AJAX POST请求404错误求助:根目录index.html调用控制器失败
嘿,这个问题我之前踩过坑!出现404 Not Found的核心原因几乎都是路由没匹配上,确实需要在RouteConfig.cs里做对应的配置,不过还要同步检查几个关键环节,我给你一步步捋清楚:
先搞定RouteConfig.cs的路由配置
MVC的路由系统会根据这里的规则匹配请求到对应的控制器和Action。如果你的POST请求对应HomeController里的SaveData方法,首先确保默认路由能覆盖,或者添加自定义路由更稳妥:public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 默认路由(能匹配大部分场景) routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // 针对你的AJAX POST添加自定义路由(可选,但更明确) routes.MapRoute( name: "AjaxPostRoute", url: "Home/SaveData", defaults: new { controller = "Home", action = "SaveData" } ); } }检查AJAX请求的URL是否正确
一定要用绝对路径(以/开头),避免相对路径因为页面位置变化导致的错误。比如你的AJAX代码应该是这样:$.ajax({ url: "/Home/SaveData", // 必须和RouteConfig里的路由规则完全对应 type: "POST", data: { username: "test", content: "hello" }, // 你的请求数据 success: function(res) { console.log("请求成功:", res); }, error: function(xhr) { console.log("错误:", xhr.statusText); } });给控制器Action加上[HttpPost]特性
MVC默认允许Action处理GET请求,但POST请求必须显式标注,否则会被拒绝或者找不到:public class HomeController : Controller { // 必须添加[HttpPost]才能接收POST请求 [HttpPost] public ActionResult SaveData(string username, string content) { // 处理你的业务逻辑 return Json(new { success = true, message = "数据已接收" }); } }额外提醒:如果是Web API的情况
如果你用的是ASP.NET Web API而不是MVC,那路由配置是在WebApiConfig.cs里,而不是RouteConfig.cs,这时候要调整对应的路由规则,并且AJAX的URL要以/api/开头。
如果做完这些还是404,可以打开浏览器的网络面板,看一下请求的完整URL,对比RouteConfig里的规则,就能快速定位哪里不匹配了!
内容的提问来源于stack exchange,提问作者Max Boy
相关产品推荐
相关产品推荐

