だから、POST
ファイルをアップロードし、AJAX経由でAntiForgeryToken
と一緒にアップロードします。私はFormDataと共にAntiForgeryToken(CSRF)をjquery ajax経由で送信する方法
偽造防止トークンを復号化することができませんでしたを取得
ビュー
@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>
コントローラ
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Upload() { //rest of code here }
:ここに私のコードです。このアプリケーションがWebファームまたはクラスタによってホストされている場合
error via fiddler。どのようにこの問題を解決するための任意のアイデア?
私は答えを見つけ:
<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>
は何である 'fnGetToken()'?アプリケーションがWebファームまたはクラスタ上でホストされていない場合 –
はこの動作を変更していますか?非Ajaxリクエストは機能しますか? –
@StephenMuecke:関数は、はい – warheat1990