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

ASP.NET Core表单提交至控制器时遭遇HTTP 405错误求助

解决ASP.NET Core 7.0.3表单POST返回405错误的思路

以下是针对你遇到的405错误的排查和解决方向:

1. 添加上CSRF防伪造令牌

ASP.NET Core的AddControllersWithViews默认启用了防CSRF验证,未携带验证令牌的POST请求会被拦截,表现为405或400错误。你需要在表单中添加验证令牌:

<form asp-action="login" asp-controller="Home" method="post">
    @Html.AntiForgeryToken() <!-- 添加这一行 -->
    <div class="form-group">
        <label>Email</label>
        <input name="email" class="form-control" />
    </div>
    <!-- 其余表单内容不变 -->
</form>

或者使用Tag Helper的方式:

<input asp-for="__RequestVerificationToken" type="hidden" />

2. 统一Action名称的大小写规范

虽然ASP.NET Core路由默认大小写不敏感,但C#的命名约定是PascalCase,部分场景下可能因大小写匹配问题导致路由解析异常。建议修改Action名称为Login,同时更新表单的asp-action:

控制器修改:

[HttpPost]
public IActionResult Login(string email, string password) // 改为大写开头的Login
{
    // 原有逻辑不变
}

表单修改:

<form asp-action="Login" asp-controller="Home" method="post">

3. 检查实际请求的网络详情

打开浏览器开发者工具(F12),切换到网络标签,重新提交表单,查看:

  • 请求的HTTP方法是否为POST
  • 请求的URL是否正确指向/Home/Login
  • 是否存在重定向(比如HTTP转HTTPS时,POST请求会被转为GET,导致405)

如果发现是重定向导致方法变更,可以确保表单生成的是HTTPS链接,或者暂时注释app.UseHttpsRedirection()测试。

4. 验证参数绑定是否正常

虽然你的参数是简单类型,但可以显式指定绑定源确保表单数据能正确映射:

[HttpPost]
public IActionResult Login([FromForm] string email, [FromForm] string password)
{
    // 原有逻辑不变
}

或者创建一个视图模型类,更规范地处理表单提交:

public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

// 控制器Action修改为:
[HttpPost]
public IActionResult Login(LoginViewModel model)
{
    var user = _context.Users.SingleOrDefault(u => u.email == model.Email && u.password == model.Password);
    // 原有逻辑不变
}

同时更新表单的name属性匹配模型字段:

<input name="Email" class="form-control" />
<input name="Password" type="password" class="form-control" />

5. 排查路由冲突

检查是否存在其他路由配置覆盖了Home/Login的POST路由。比如是否有MapGet("login", ...)或其他属性路由的Action与当前路由冲突。从你提供的Program.cs代码看,默认路由配置是正常的,但如果有其他未展示的路由代码,需要逐一排查。

内容的提问来源于stack exchange,提问作者nai hamdan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:34