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

Razor Pages同一表单支持GET/POST提交时POST返回400错误如何解决

问题根因

ASP.NET Core Razor Pages 框架默认开启了请求防伪验证机制,所有POST请求必须携带合法的防伪令牌才能被处理,否则会直接返回400 Bad Request,不会进入你写的OnPost*处理方法。
你当前的<form>标签没有使用Razor Pages的内置TagHelper,也没有手动生成防伪令牌字段,所以POST提交时没有携带令牌,被框架直接拦截。

解决方法

方案1:启用表单自动生成防伪令牌(推荐)

把你的form标签修改为带asp-page属性的形式,Razor Pages TagHelper会自动在表单中插入隐藏的防伪令牌字段:

<form asp-page="./List">
<!-- 其余表单内容保持不变 -->
</form>

如果不想指定asp-page,也可以直接在表单内部手动添加防伪令牌生成代码:

<form>
    @Html.AntiForgeryToken()
    <!-- 其余表单内容保持不变 -->
</form>

方案2:禁用当前页面的防伪验证(仅推荐内部后台等低安全风险场景使用)

给你的ListModel类添加[IgnoreAntiforgeryToken]特性,直接跳过当前页面所有POST请求的防伪校验:

[IgnoreAntiforgeryToken]
public class ListModel : PageModel
{
    // 原有代码保持不变
}

补充注意事项

如果你POST提交后发现筛选参数为空,需要确认所有筛选条件的输入控件都放在form标签内部,或者添加对应的hidden字段保存筛选值,保证POST时参数能正常绑定到PageModel的属性上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:18:02