ASP.NET Core Razor页面Post操作抛HTTP 405错误,OnPostAsync未执行
Razor Pages Post请求405错误排查与修复
核心原因及解决步骤
1. 缺失防伪造令牌验证
ASP.NET Core Razor Pages默认强制防伪造令牌校验,未携带令牌的Post请求会被直接拒绝并返回405。
修复方式:在表单内添加防伪造令牌,二选一即可:
- 使用HTML辅助方法:
<form method="post"> @Html.AntiForgeryToken() <input type="submit" value="Submit" /> </form>
- 或使用Tag Helper属性:
<form method="post" asp-antiforgery="true"> <input type="submit" value="Submit" /> </form>
注:正常情况下,method="post"的表单会自动注入令牌,但项目配置变更可能导致自动注入失效,手动添加即可解决。
2. 页面与模型命名不匹配
Razor Pages通过文件名绑定对应模型类,需确保:
- 页面模型类
SubmitTestModel对应的Razor页面文件名为SubmitTest.cshtml,且放置在项目默认的Pages目录下。
3. 端点路由未正确配置
检查项目启动文件(Program.cs或Startup.cs),确认已启用Razor Pages端点路由:
// Program.cs 示例代码 var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); // 省略其他中间件配置... // 必须添加此代码以启用Razor Pages路由 app.MapRazorPages(); app.Run();
缺少app.MapRazorPages()会导致Post请求无法匹配到OnPostAsync方法。
4. 其他拦截因素排查
- 检查自定义中间件/过滤器是否误拦截了Post请求;
- 确认托管环境未限制HTTP Post方法的使用。
验证
完成上述操作后重新运行项目,提交表单时OnPostAsync方法将正常执行,405错误消失。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

