Vì vậy, tôi muốn POST
tệp Tải lên cùng với AntiForgeryToken
qua AJAX. Dưới đây là mã của tôi:Cách gửi AntiForgeryToken (CSRF) cùng với FormData qua jquery ajax
Xem
@using (Html.BeginForm("Upload", "RX", FormMethod.Post, new {id = "frmRXUpload", enctype = "multipart/form-data"}))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(m => m.RXFile, new {.type = "file"})
...rest of code here
}
<script>
$(document).ready(function(){
$('#btnRXUpload').click(function() {
var form = $('#frmRXUpload')
if (form.valid()) {
var formData = new FormData(form);
formData.append('files', $('#frmRXUpload input[type="file"]')[0].files[0]);
formData.append('__RequestVerificationToken', fnGetToken());
$.ajax({
type: 'POST',
url: '/RX/Upload',
data: formData,
contentType: false,
processData: false
})
}
})
})
</script>
khiển
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Upload()
{
//rest of code here
}
tôi nhận được
Các dấu hiệu chống giả mạo không thể được giải mã. Nếu ứng dụng này được lưu trữ bởi Trang web trên web hoặc cụm
lỗi thông qua fiddler. Bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này?
Tôi tìm thấy ĐÁP:
<script>
$(document).ready(function(){
$('#btnRXUpload').click(function() {
var form = $('#frmRXUpload')
if (form.valid()) {
var formData = new FormData(form.get(0)); //add .get(0)
formData.append('files', $('#frmRXUpload input[type="file"]')[0].files[0]);
$.ajax({
type: 'POST',
url: '/RX/Upload',
data: formData,
contentType: false,
processData: false
})
}
})
})
</script>
là gì 'fnGetToken() '? –
Hành vi này có thay đổi nếu ứng dụng không được lưu trữ trên Trang web hoặc cụm không? Yêu cầu không ajax có hoạt động không? –
@StephenMuecke: một chức năng để nhận được chuỗi mã thông báo – warheat1990