2015-10-27 82 views
0

我在我的MVC應用程序中實現了以下代碼,用於在用戶單擊鏈接時加載一些Json對象。針對多個ajax json請求的防僞令牌

<form> 
    @Html.AntiForgeryToken() 
</form> 

$("body").on('click', ".clickhere", (function() { 
var token = $('[name=__RequestVerificationToken]').val(); 

    $.ajax({ 
     type: 'POST', 
     url: '/do/things', 
     cache: false, 
     headers: { "__RequestVerificationToken": token }, 
     contentType: 'application/json; charset=utf-8', 
     data: data 
}, 
     success: function() { 
      ... 
     }, 
     error: function() { 
      ... 
     } 
    }); 
}); 

我根據this tutorial驗證令牌。奇怪的事實是,如果我在Visual Studio 2015中運行該項目,但是如果它在IIS 6.2上作爲應用程序發佈,則此工作正常。在IIS上運行時,我可以清楚地看到請求令牌不匹配。

+0

可以看到緩存的頁面陳舊令牌。硬刷新會發生什麼? – charlietfl

+0

@charlietfl同樣的結果 –

回答

0

爲了使它工作,我改變了代碼在視圖中:

@functions{ 
    public string GetAntiForgeryToken() 
    { 
     string cookieToken, formToken; 
     AntiForgery.GetTokens(null, out cookieToken, out formToken); 
     return cookieToken + "," + formToken; 
    } 
} 
<input type="hidden" name="__RequestVerificationToken" id="__RequestVerificationToken" value="@GetAntiForgeryToken()" />