将FormData对象提交到Razor页面

3

我在应用程序中使用简单的jQuery $.post遇到了问题。我尝试了互联网上的许多方法和解决方案,但都无济于事。当发送POST请求时,我看到400错误。

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

在我的脚本中,通过按钮点击调用了$.post方法:
$('#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');
    });                                                                                   
});

解决方案文件夹路径


400错误路径似乎是正确的:https://myip:44388/Recovery/RecoveryAdhocInvoicing?handler=DoJob - Paul
1个回答

1

您需要在请求中添加 RequestVerificationToken 头。

$.ajax({
    type: "POST",
    headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
    url: window.location.href + '?handler=DoJob',
    data: {
        "invNo": $('#adhocInvoiceNumber').val(),
        "account": $('#invoiceAccountInput').val()
    },
    contentType: "application/x-www-form-urlencoded"
}).done(function (response) {
    alert('Posted');
});

文档: https://www.learnrazorpages.com/security/request-verification#ajax-post-requests-and-json

该文档介绍了如何在使用Ajax进行POST请求时,通过JSON传递数据并启用请求验证功能。使用此技术可以防止跨站点请求伪造(CSRF)攻击。您可以按照文档中提供的步骤来实现此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接