Asp.net mvc Valums文件上载程序-包括ValidateAntiForgeryToken

Asp.net mvc Valums文件上载程序-包括ValidateAntiForgeryToken,asp.net-mvc,valums-file-uploader,Asp.net Mvc,Valums File Uploader,我试图使用MVCValidateAntiForgeryToken保护我的upload controller方法,但我正在努力解决如何获得帖子中包含的\uu RequestVerificationToken 我的行动是这样的: [HttpPost, ValidateAntiForgeryToken] public ActionResult FileUpload(HttpPostedFileBase qqfile) 通过查看上传程序,我找不到任何公开的钩子,允许我访问qq代码之外的内容来操作它生成

我试图使用MVC
ValidateAntiForgeryToken
保护我的upload controller方法,但我正在努力解决如何获得帖子中包含的
\uu RequestVerificationToken

我的行动是这样的:

[HttpPost, ValidateAntiForgeryToken]
public ActionResult FileUpload(HttpPostedFileBase qqfile)
通过查看上传程序,我找不到任何公开的钩子,允许我访问qq代码之外的内容来操作它生成的表单

还有其他人能让这个工作吗

编辑表单创建的源文件后,我的请求仍未通过验证:

请求

http://localhost:54275/UserProfile/FileUpload?qqfile=266758_10150696082935268_8163320_o.jpg

Host: localhost:54275
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
X-Requested-With: XMLHttpRequest
X-File-Name: 266758_10150696082935268_8163320_o.jpg
Content-Type: application/octet-stream
X-Mime-Type: image/jpeg
Referer: http://localhost:54275/UserProfile/Edit
Content-Length: 625352
Cookie: __test=1; RememberMe=-1167340540^1#-5833880764017141030; __RequestVerificationToken=BEIHblTcEaCio_1_i6bJnSYmituqQfq9y2ge63T85w15pAhbPldPZqY8DhLTubmtmd9OLtAuJcHdmfaFHSbn1L7oAYAtxDJWdMOOzNrddhU1; DotNetOpenAuth.WebServerClient.XSRF-Session=O-l5-Hv0flYqKL27j0TGhA; .ASPXAUTH=52C5EDFB92A09FA0395676E23BE1EBBBF03D3E88EF7C81761B76C1C8EF67936C0D9FBFD730ED77B0246C49757828A7C17D0DD7644A1C50988ECFF4C3DEDF15783E5FD7C4BA97E484F9FD6460EB6A5310E27453B461E320D10E74A5F8AEE1C0A5B1367D0DB4060958B48DACB12E80AA23; TCSESSIONID=D9016B850A1BCFD6921E274467F52CEE
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Fiddler-Encoding: base64

如果您查看源代码,看起来可以将反伪造令牌代码添加到上传程序的_createForm:function(iframe,params){…}部分,并且很好。有关更多帮助,请参见这两个答案。

我正在使用FineUploader的5.11.10版(重命名Valum的FileUploader) 并且它确实包含指定表单的功能,请参见

如果您的表单不包含任何其他表单值,则使用AntiForgeryToken验证的FineUpload的一个示例是将具有某个id的表单(以下示例中的testForm)与AntiForgeryToken一起包含

@using (Html.BeginForm(MVCHelpers.Bank.Transactions.UploadFile(), FormMethod.Post, new { id = "testForm" }))
{
    @Html.AntiForgeryToken()
}
并在FineUploader中指定它必须发送的表单:

<div id="fileUploadContainer"></div>
<script>
    var uploader = new qq.FineUploader({
        element: document.getElementById("fileUploadContainer"),
        ...
        form: {
            element: "testForm",
            autoUpload: true
        }
    });
</script>

var uploader=new qq.FineUploader({
元素:document.getElementById(“fileUploadContainer”),
...
表格:{
元素:“testForm”,
自动上载:true
}
});

这使您能够在操作中结合[ValidateAntiForgeryToken]上载文件。如果上载是其他表单值的一部分,则还可以通过指定该表单的id来指定真实表单。请注意autoUpload true,因为在设置表单元素时默认为false。

是的,我在浏览时确实看到了该代码,但类似的黑客源代码在以后升级时几乎肯定会丢失。老实说,这是我试图避免的。谢谢。我已经为我的Ajax东西使用了一些类似的代码,所以我已经准备好了所有这些,我只是不想攻击源文件。另一个选项,我还没有测试过,可能是在调用上传程序时将防伪添加到'params'变量中。我已经尝试过params方法,但它不起作用。我刚刚编辑了表单创建方法,这也不起作用。。。非常奇怪。而且,奇怪的是,在表单创建方法上添加断点也不会被击中。。。更奇怪的是。。。