Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC防伪令牌赢得';通过AJAX发布时不允许多个文件上载_C#_Ajax_Model View Controller_Csrf_Antiforgerytoken - Fatal编程技术网

C# MVC防伪令牌赢得';通过AJAX发布时不允许多个文件上载

C# MVC防伪令牌赢得';通过AJAX发布时不允许多个文件上载,c#,ajax,model-view-controller,csrf,antiforgerytoken,C#,Ajax,Model View Controller,Csrf,Antiforgerytoken,我知道上传多个文件很好,因为当我发表评论时 [ValidateAntiForgeryToken]我可以选择多个文件,它们将按预期上传而不会出现任何问题 但是,当我将[ValidateAntiForgeryToken]放回时,如果我选择了2个或多个文件,则会出现服务器500状态错误,并且不会上载任何文件 此外,我将添加错误: 加载资源失败:服务器响应状态为500(内部服务器错误)堆栈跟踪显示它在上载操作的第1行停止 但是,如果我选择1个文件,它将成功上载,并且我将获得状态代码200 我对这一点还相

我知道上传多个文件很好,因为当我发表评论时
[ValidateAntiForgeryToken]
我可以选择多个文件,它们将按预期上传而不会出现任何问题

但是,当我将
[ValidateAntiForgeryToken]
放回
时,如果我选择了2个或多个文件
,则会出现服务器
500状态错误
,并且不会上载任何文件

此外,我将添加错误:
加载资源失败:服务器响应状态为500(内部服务器错误)
堆栈跟踪显示它在上载操作的
第1行停止

但是,如果我选择1个文件,它将成功上载,并且我将获得
状态代码200

我对这一点还相当陌生——我不知道出了什么问题。我非常感谢您对这个谜的帮助。:-)

这是我的控制器操作:

[HttpPost]
[ValidateAntiForgeryToken]   // If I comment this out, everything works as intended
public ActionResult Upload()
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        var file = Request.Files[i];

        var fileName = Path.GetFileName(file.FileName);

        var path = Path.Combine(Server.MapPath("~/Some/FilePath"), fileName);
        file.SaveAs(path);
    }

    return Json(new { success = true, responseText = "Success!" }, JsonRequestBehavior.AllowGet); //This is placeholder, I'll implement validation later
}
JQuery,AJAX。这是上传功能

function UploadAjax(storedFilesArray) {
    var formData = new FormData();

    for (let i = 0; i < storedFilesArray.length; i++) {
        let file = storedFilesArray[i];

        formData.append('__RequestVerificationToken', getToken()); //appends the value to the formData. 
        formData.append("file-upload", file);
    }
    $.ajax({
        type: "POST",
        dataType: 'json',
        cache: false,
        url: '/Home/Upload',
        data: formData,
        contentType: false,
        processData: false,
        success: function (response) {
            ...
        },
        error: function (response) {
            ...
        }
    });
}

将此线从回路中取出(并将其置于回路上方或下方):


append
将继续添加到提交到服务器的
\u RequestVerificationToken
值。一旦附加到Once(即,如果选择了2个或更多文件),该值将不是有效的XSRF防伪令牌。然后它无法验证,因此服务器上会出现错误。

将这一行从循环中取出(并将其置于循环的上方或下方):


append
将继续添加到提交到服务器的
\u RequestVerificationToken
值。一旦附加到Once(即,如果选择了2个或更多文件),该值将不是有效的XSRF防伪令牌。然后它无法验证,因此您在服务器上得到一个错误。

也许您应该设置
formData.append(“'uu RequestVerificationToken',getToken())超出周期

var formData = new FormData();
formData.append('__RequestVerificationToken', getToken()); //appends the value to the formData. 
for (let i = 0; i < storedFilesArray.length; i++) {
        let file = storedFilesArray[i];
         formData.append("file-upload", file);
    }
var formData=new formData();
append(“”“RequestVerificationToken”,getToken())//将值附加到formData。
for(设i=0;i
也许您应该设置
formData.append(“'u RequestVerificationToken',getToken())超出周期

var formData = new FormData();
formData.append('__RequestVerificationToken', getToken()); //appends the value to the formData. 
for (let i = 0; i < storedFilesArray.length; i++) {
        let file = storedFilesArray[i];
         formData.append("file-upload", file);
    }
var formData=new formData();
append(“”“RequestVerificationToken”,getToken())//将值附加到formData。
for(设i=0;i
由于所有文件都具有相同的文件名,因此只能获取最后一个文件。看起来就像上传了一个文件(最后一个)。检查上传的文件的大小,看看哪个在文件夹中。对不起,我应该告诉你。当我使用[ValidateAntiforgeryToken]选择多个文件时,我不会上载任何文件。只有当我选择1个文件时,我才能在相同的情况下上传它。我将更新帖子。:)请参见以下内容:由于所有文件都具有相同的文件名,因此只能获取最后一个文件。看起来就像上传了一个文件(最后一个)。检查上传的文件的大小,看看哪个在文件夹中。对不起,我应该告诉你。当我使用[ValidateAntiforgeryToken]选择多个文件时,我不会上载任何文件。只有当我选择1个文件时,我才能在相同的情况下上传它。我将更新帖子。:)看下面:哦,我的天!我很抱歉,我现在觉得自己很愚蠢,没有注意到这一点。非常感谢你-一双新鲜的眼睛走了很长的路:)现在我明白了这个问题。。。我发现这个问题没有反映实际问题。我是S.O.的新手。我该怎么做?>_@LiudvikasTaluntis很高兴这有帮助。就你的问题而言,没关系。您描述了您的问题,提供了必要的代码和复制步骤。别管它。仅仅因为问题很明显(和你想象的不同),现在并不能使这个问题无效。哦,我的上帝!我很抱歉,我现在觉得自己很愚蠢,没有注意到这一点。非常感谢你-一双新鲜的眼睛走了很长的路:)现在我明白了这个问题。。。我发现这个问题没有反映实际问题。我是S.O.的新手。我该怎么做?>_@LiudvikasTaluntis很高兴这有帮助。就你的问题而言,没关系。您描述了您的问题,提供了必要的代码和复制步骤。别管它。仅仅因为问题很明显(与您认为的不同),现在并不会使问题无效。感谢您注意到这一点。我认为那部分代码很好的假设对我不利><我真的很感谢你的帮助。:)不过,我不知道该怎么处理这个问题,因为它并没有反映出这个问题。我是将其更改为更相关的内容,还是将其删除?对S.O.和一般编程新手>(我不知道:)也许把问题标记为已回答。也许其他人也会犯类似的错误,在表单中多次添加
\uu RequestVerificationToken
。我明白了:)再次感谢您的帮助-如果不解决这个问题,我就不会离开家了谢谢你注意到这一点。我认为那部分代码很好的假设对我不利><我真的很感谢你的帮助。:)不过,我不知道该怎么处理这个问题,因为它并没有反映出这个问题。我是将其更改为更相关的内容,还是将其删除?对S.O.和一般编程新手>(我不知道:)也许把问题标记为已回答。也许其他人也会犯类似的错误,在表单中多次添加
\uu RequestVerificationToken
。我明白了:)再次感谢您的帮助-如果不解决这个问题,我就不会离开家了D
System.Web.Mvc.HttpAntiForgeryException: The anti-forgery token could not be
decrypted. If this application is hosted by a Web Farm or cluster, ensure that
all machines are running the same version of ASP.NET Web Pages and that the
<machineKey> configuration specifies explicit encryption and validation keys.
AutoGenerate cannot be used in a cluster.
formData.append('__RequestVerificationToken', getToken()); //appends the value to the formData.
var formData = new FormData();
formData.append('__RequestVerificationToken', getToken()); //appends the value to the formData. 
for (let i = 0; i < storedFilesArray.length; i++) {
        let file = storedFilesArray[i];
         formData.append("file-upload", file);
    }