Ajax 如何在Razor PageModel中从Javascript检索FormData(HtmlFormElement)数据?

Ajax 如何在Razor PageModel中从Javascript检索FormData(HtmlFormElement)数据?,ajax,asp.net-core,base64,croppie,Ajax,Asp.net Core,Base64,Croppie,我正在尝试使用ajax向我的Razor页面模型发送base64字符串。base64字符串是裁剪结果的结果。任何帮助都将不胜感激。我尝试了以下方法: 1) 创建FormData表单并将其发送到我的页面模型: var f = new FormData(); f.append('s',base64) $.ajax({ url: "?handler=SaveIcon", data: f })

我正在尝试使用ajax向我的Razor页面模型发送base64字符串。base64字符串是裁剪结果的结果。任何帮助都将不胜感激。我尝试了以下方法:

1) 创建FormData表单并将其发送到我的页面模型:

        var f = new FormData();
        f.append('s',base64)

        $.ajax({
            url: "?handler=SaveIcon",
            data: f
        });
        $.ajax({
            url: "?handler=SaveIcon",
            data: { 's': base64 }
        });
        var token = $('input[name="__RequestVerificationToken"]').val();
        var headers = {};
        headers['__RequestVerificationToken'] = token;

        var f = new FormData();
        f.append('s', base64);

        $.ajax({
            headers: headers,
            url: "?handler=SaveIcon",
            method: "POST",
            data: f,
            contentType: false,
            processData: false
        });
结果:

        jquery.js:8463 Uncaught (in promise) TypeError: Illegal invocation
        at add (jquery.js:8463)
        at buildParams (jquery.js:8450)
        at Function.jQuery.param (jquery.js:8483)
        at Function.ajax (jquery.js:9073)
        at ChangeProfilePhoto:205
2) 通过ajax直接传递base64字符串:

        var f = new FormData();
        f.append('s',base64)

        $.ajax({
            url: "?handler=SaveIcon",
            data: f
        });
        $.ajax({
            url: "?handler=SaveIcon",
            data: { 's': base64 }
        });
        var token = $('input[name="__RequestVerificationToken"]').val();
        var headers = {};
        headers['__RequestVerificationToken'] = token;

        var f = new FormData();
        f.append('s', base64);

        $.ajax({
            headers: headers,
            url: "?handler=SaveIcon",
            method: "POST",
            data: f,
            contentType: false,
            processData: false
        });
结果:URI太长

3) 通过post发送base64字符串:

        var f = new FormData();
        f.append('s',base64)

        $.ajax({
            url: "?handler=SaveIcon",
            data: f
        });
        $.ajax({
            url: "?handler=SaveIcon",
            data: { 's': base64 }
        });
        var token = $('input[name="__RequestVerificationToken"]').val();
        var headers = {};
        headers['__RequestVerificationToken'] = token;

        var f = new FormData();
        f.append('s', base64);

        $.ajax({
            headers: headers,
            url: "?handler=SaveIcon",
            method: "POST",
            data: f,
            contentType: false,
            processData: false
        });

结果:400错误请求。

您需要将
processData
contentType
参数设置为
false

var f = new FormData();
f.append('s',base64)

$.ajax({
    url: "?handler=SaveIcon",
    method: "post",
    data: f,
    contentType: false,
    processData: false
});
为了通过标头传递antiforgery令牌,请使用默认标头名称(如果未配置其他)
RequestVerificationToken
(不带前导下划线)

或者也可以将其作为
FormData
传递

var f = new FormData();
f.append('s',base64);
f.append("__RequestVerificationToken", token);

您需要将
processData
contentType
参数设置为
false

var f = new FormData();
f.append('s',base64)

$.ajax({
    url: "?handler=SaveIcon",
    method: "post",
    data: f,
    contentType: false,
    processData: false
});
为了通过标头传递antiforgery令牌,请使用默认标头名称(如果未配置其他)
RequestVerificationToken
(不带前导下划线)

或者也可以将其作为
FormData
传递

var f = new FormData();
f.append('s',base64);
f.append("__RequestVerificationToken", token);

谢谢,但是现在我收到了一个400错误的请求,尽管我在ajax调用的头上添加了一个令牌。@SalS请将您的
c
操作代码添加到问题中,这样我就可以调查这个问题了,但是现在我收到了一个400错误的请求错误,尽管我在ajax调用的头上添加了一个令牌。@SalS请将您的
c
操作代码添加到问题中,以便我可以调查这个问题