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

使用jQuery $.post向Razor Page提交FormData时出现400错误求助

Razor Page中jQuery $.post请求400错误解决

使用jQuery的$.post方法向Razor Page发送POST请求时持续出现400错误,尝试多种方案未解决,相关代码如下:

后端PageModel代码

public class RecoveryAdhocInvoicingModel : PageModel
{                                                                                  
    Public IActionResult OnPostDoJob(string invNo, string account)
    {
        //var emailAddress = Request.Form["emailaddress"];
        // do something with emailAddress
        return new JsonResult("");
    }                                                                                   
}

前端jQuery代码

$('#submitBtnUpdateJob').click(function (evt) {
            var formdata = new FormData();
            formdata.append("invNo", $('#adhocInvoiceNumber').val());
            formdata.append("account", $('#invoiceAccountInput').val());

    $.post(window.location.href + '?handler=DoJob', JSON.stringify(formdata), function () {
         alert('Posted');
    });                                                                                   
});

问题排查与解决

1. 修正后端方法访问修饰符

C#是大小写敏感语言,代码中Public需改为小写public,否则后端方法无法被框架正确识别:

public IActionResult OnPostDoJob(string invNo, string account)

2. 添加防伪造令牌验证

Razor Page默认启用防伪造令牌验证,POST请求未携带令牌会直接返回400错误:

  • 在页面中添加令牌:在页面任意位置插入@Html.AntiForgeryToken()
  • 修改前端请求,在headers中携带令牌:
    $('#submitBtnUpdateJob').click(function (evt) {
        var postData = {
            invNo: $('#adhocInvoiceNumber').val(),
            account: $('#invoiceAccountInput').val()
        };
        var token = $('input[name="__RequestVerificationToken"]').val();
    
        $.ajax({
            url: window.location.href + '?handler=DoJob',
            type: 'POST',
            headers: {
                'RequestVerificationToken': token
            },
            data: postData,
            success: function () {
                alert('Posted');
            }
        });
    });
    

3. 修正请求数据格式

不要使用FormData结合JSON.stringify传递数据,这种方式会导致后端无法解析参数。直接传递普通JS对象即可,jQuery会自动处理为表单格式数据,匹配后端参数绑定要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:55:29