You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Html.BeginForm向Controller提交HTTP Post时遇404错误

解决表单提交404错误的思路

嘿,我碰到过好多次这种情况,咱们一步步来排查问题:

1. 先确认路由是否匹配

首先得确保你的ScheduleInfo Action的[HttpPost]特性是正确加在方法上的,而且表单提交的路径能精准命中这个Action。比如你的控制器是SchedulerController,那正确的提交URL应该是/Scheduler/ScheduleInfo。

  • 去看看你的路由配置有没有自定义规则覆盖了默认路由,默认路由一般是这样的:
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

如果有自定义路由,得确认它不会把Post请求的路径给拦走了。

2. 检查Html.BeginForm的参数是否正确

很多时候404都是因为表单提交的目标路径写错了。你的视图里的Html.BeginForm得明确指定控制器和Action,比如:

@using (Html.BeginForm("ScheduleInfo", "Scheduler", FormMethod.Post))
{
    // 你的表单控件
}

要是没指定这俩参数,表单会默认提交到当前页面的URL,大概率就找不到对应的Post Action了。

3. 确保Action参数和表单字段匹配

模型绑定失败有时候也会间接导致路由匹配不上。比如你表单里的输入框name是StartTime,那你的Action得有对应的参数:

[HttpPost]
public ActionResult ScheduleInfo(DateTime StartTime)
{
    // 处理逻辑
}

或者更规范一点,用ViewModel来接收:

public class ScheduleViewModel
{
    public DateTime StartTime { get; set; }
    // 其他需要的字段
}

[HttpPost]
public ActionResult ScheduleInfo(ScheduleViewModel model)
{
    // 处理逻辑
}

字段名一定要完全对应,大小写在ASP.NET里默认不区分,但最好保持一致避免踩坑。

4. 排查防伪令牌的问题

如果你的Action加了[ValidateAntiForgeryToken],但视图里没加@Html.AntiForgeryToken(),这时候请求会被拒绝,但有些环境下可能会返回404而不是预期的400。你可以先暂时把这个特性注释掉测试一下,能正常提交的话再补回防伪令牌。

5. 查看实际请求的URL

打开浏览器开发者工具(按F12),切换到Network标签,提交表单后看看请求的URL到底是什么。有时候大小写问题(比如控制器名是Scheduler但请求里是scheduler)在Linux或者某些IIS配置下会导致404,因为这些环境区分大小写。

6. 如果用了属性路由要注意匹配规则

要是你的控制器或Action用了[Route]特性,那表单的提交路径得和路由模板完全匹配。比如Action是这样的:

[HttpPost]
[Route("schedule/submit-info")]
public ActionResult ScheduleInfo(...)
{
    // 处理逻辑
}

那表单的Action属性就得是/schedule/submit-info,不然肯定找不到对应的路由。

要是你能把完整的控制器代码和视图代码贴出来,我能更精准地帮你定位问题,但先按上面的步骤排查,应该能找到问题所在。

内容的提问来源于stack exchange,提问作者Harry Tipper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:46:50