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

VS 2022中ASP.NET Core Razor页面OnPostAsync方法返回HTTP 400错误

VS 2022中ASP.NET Core Razor页面OnPostAsync方法返回HTTP 400错误

兄弟,遇到Razor页面OnPostAsync返回400错误,我之前也踩过好几个坑,最常见的原因就是CSRF(跨站请求伪造)验证失败——毕竟ASP.NET Core Razor页面默认就开启了这个保护机制,咱们一步步来排查:

  • 先检查表单的防伪令牌:
    如果你用的是普通HTML表单,一定要在表单内部加上@Html.AntiForgeryToken();要是用Razor的表单标签助手<form method="post">,它会自动帮你插入隐藏的防伪令牌(你可以查看页面渲染后的HTML,找name为__RequestVerificationToken的input标签)。要是表单里没这个令牌,服务器直接就会返回400拒绝请求。

  • 排查模型绑定与验证问题:
    400错误也可能是表单提交的数据和你的LoginModel属性不匹配,或者模型里带[Required]这类验证特性的字段没传值,导致模型验证失败。你可以在OnPostAsync方法的开头加一段代码,先检查模型状态:

    if (!ModelState.IsValid)
    {
        // 这里可以打印ModelState的错误信息,或者直接返回页面看验证提示
        return Page();
    }
    

    调试的时候看看ModelState.Errors里的具体内容,就能快速定位到哪项数据出了问题。

  • 如果你用AJAX提交请求:
    要是通过JS发送POST请求,得手动在请求头里带上防伪令牌。首先从浏览器的Cookie中取出XSRF-TOKEN的值,然后在AJAX请求的headers里添加X-XSRF-TOKEN: 你取出的令牌值,这样服务器才能通过验证。

  • 检查OnPostAsync方法的签名:
    确保方法的定义是正确的,比如:

    public async Task<IActionResult> OnPostAsync()
    {
        // 你的业务逻辑
    }
    

    要是需要接收表单数据,参数要和表单字段对应,比如public async Task<IActionResult> OnPostAsync(LoginInputModel input),保证输入模型的属性名和表单的name属性一致(默认不区分大小写,但尽量保持一致避免踩坑)。

备注:内容来源于stack exchange,提问作者Iyad ADJEROUD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:47:59