2016-11-04 74 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代碼調用我的控制器方法時,出現服務器錯誤。如果我從我的帳戶登錄表單中刪除AntiForgery令牌(每個表單的令牌值不同),我的請求就會通過。如何解決此問題而不刪除我的帳戶註銷令牌?

這裏是我的控制器:

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

這裏是我主要去了通過:How to make ajax request with anti-forgery token in mvc

回答

0

我解決了這個。在我的ajax調用之前,我正在序列化整個表單。我改變:

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

要這樣:

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

現在我在經營。