我正在尝试使用 MVC 保护我的上传控制器方法ValidateAntiForgeryToken
但我正在努力弄清楚如何获得__RequestVerificationToken
包含在帖子中。
我的动作是这样的:
[HttpPost, ValidateAntiForgeryToken]
public ActionResult FileUpload(HttpPostedFileBase qqfile)
纵观整个文档 http://valums-file-uploader.github.io/file-uploader/对于上传者来说,我找不到任何暴露的钩子可以让我在 qq 代码之外访问以操纵它生成的表单。
还有其他人设法让它发挥作用吗?
编辑表单创建的源文件后,我的请求仍未通过验证:
Request
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
我正在使用 FineUploader 5.11.10 版本(Valum 的 FileUploader 重命名)提及 FineUploader 历史 https://stackoverflow.com/a/17330174/4975760)
它确实包含指定表单的功能,请参阅表格选项 http://docs.fineuploader.com/branch/master/api/options.html#form
如果您的表单不包含任何其他表单值,则使用 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>
这使您可以在操作中结合 [ValidateAntiForgeryToken] 上传文件。如果上传是其他表单值的一部分,您还可以通过指定该表单的 id 来指定真实表单。请注意 autoUpload true,因为当您设置表单元素时它默认为 false。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)