我正在尝试使用MVC保护我的上传控制器方法ValidateAntiForgeryToken
,但我正在努力弄清楚如何将__RequestVerificationToken
包含在帖子中。
我的行动是这样的:
[HttpPost, ValidateAntiForgeryToken]
public ActionResult FileUpload(HttpPostedFileBase qqfile)
通过documentation查看上传器,我找不到任何可以在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
答案 0 :(得分:1)
我正在使用FineUploader的5.11.10版本(重命名为Valum&#39的FileUploader FineUploader history mentioned) 它确实包含指定表单的功能,请参阅Form Options
如果您的表单不包含任何其他表单值,则使用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>
这使您可以在Action上与[ValidateAntiForgeryToken]一起上传文件。如果上载是其他表单值的一部分,您还可以通过指定该表单的ID来指定真实表单。请注意autoUpload为true,因为在设置表单元素时默认为false。
答案 1 :(得分:0)
如果您查看源代码,看起来您可以将防伪令牌代码添加到上传者的_createForm:function(iframe,params){...}部分并且很好。请参阅两个答案here以获取更多帮助。