0

私のSPA Webサイトでは、偽造防止トークンをajaxでサーバーに送信する必要があります。私はこの記事の方法を使用します:

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-%28csrf%29-attacks

だから私のlayout.cshtmlにはローカル関数があります:

<script>
    @functions{
    public string TokenHeaderValue()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + ":" + formToken;                
    }
}
</script>

そして、register.js という名前の別の js ファイルがあり、ajax 内でこの関数を呼び出します。

   $.ajax({
                url: 'User/JsonRegister',
                type: "POST",
                data: d,
                headers: {
                    'RequestVerificationToken': '@TokenHeaderValue()'
                },
                success: function (result) {
                },
                error: function (result) {
                }
            });

問題は、@TokenHeaderValue() が呼び出されず、このエラーが発生し続けることです。

The required anti-forgery form field "__RequestVerificationToken" is not present.

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

-1

JSON形式でデータを渡す

$.ajax({
     type:"POST",
     datatype:"JSON",
     data:{d:d}, // Remaining code is same

});

また、リクエスト[HttpPost]であるため、コントローラーのメソッド署名の前に使用します。Post

于 2013-06-09T09:35:41.000 に答える