2016-11-04 9 views
0

AJAX要求のヘッダーにAntiForgeryトークンを渡そうとしています。私のJavaScriptコードは次のようになります。私のフォームはこのようになりますMVCコントローラが不適切なAntiForgeryトークンを検証しているようです

var tokenadr = $('form[action="/ServiceRequests/CreateRequest"] input[name="__RequestVerificationToken"]').val(); 
var token = tokenadr; 
var headers = {}; 
var headersadr = {}; 
headers['__RequestVerificationToken'] = token; 
headersadr['__RequestVerificationToken'] = tokenadr; 
$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    headers: headersadr, 
    cache: false, 
    url: "/ServiceRequests/CreateRequest", 
    processData: false, 
    contentType: false, 
    data: formdata, 
    success: function (response, textStatus, jqXHR) { 
     window.location = "/ServiceRequests/Details/" + response.id; 
    }, 

    error: function (jqXHR, textStatus, errorThrown) { 
     alert('Error - ' + errorThrown); 
    }, 

})` 

@using (Html.BeginForm("CreateRequest", "ServiceRequests", null, FormMethod.Post, new { enctype = "multipart/form-data", id = "requestForm" })) 
    { 
    @Html.AntiForgeryToken() 

問題は私の共有ビューフォルダに、私はこのような形で部分ログインビューを持っているということです。

using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) 
{ 
@Html.AntiForgeryToken() 

上記のAjaxコードを使用してコントローラメソッドを呼び出すと、サーバーエラーが発生します。アカウントのLogOffフォームからAntiForgeryトークンを削除すると、トークンの値が各フォームごとに異なります。アカウントログオフトークンを削除せずにこれを解決するにはどうすればよいですか?ここで

は私のコントローラである:私はこれを解決しHow to make ajax request with anti-forgery token in mvc

答えて

0

:ここ

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult CreateRequest() 
{ 

は私が主で行くされているものです。私のアヤックスコールの前に、私は自分のフォーム全体をシリアライズしていました。これに

var other_data = $('form').serializeArray(); 

:私は変更

var other_data = $('#requestForm').serializeArray(); 

をそして今、私はビジネスにしています。

関連する問題