如何在mvc4中实现具有部分视图的Antiforgerytokens?

时间:2016-08-03 11:21:06

标签: ajax asp.net-mvc asp.net-mvc-4 antiforgerytoken

我正在尝试在我的项目中实施antiforgerytoken。我可以在下面进行ajax调用时实现它。

 function docDelete(id) {
        var _upload_id = $("#docId").val();
        var _comments = $("#name").val();
        var forgeryId = $("#forgeryToken").val();

        $("#dialog-form").dialog("open");
        $.ajax({
            type: 'GET',
            cache: false,
            url: '/DeleteDocument/Delete',
            dataType: 'json',
            headers: {
                'VerificationToken': forgeryId
            },
            data: { _upload_id: _upload_id, _comments: _comments },
            success: function (data) {
                $('#dialog-form').dialog('close');
                $('#name').val('');
                $('#dvSuccess').val(data);
                Getgridata(data);
            }
        });
    }

上面的代码工作正常。但在某些情况下,我正在制作如下的ajax请求。

var forgeryId = $("#forgeryToken").val();
function GetGrid() {
    $.ajax(
    {

        type: "GET",
        dataType: "html",
        cache: false,
        url: '/Dashboard/GetGridData',
        headers: {
            'VerificationToken': forgeryId
        },
        success: function (data) {
            $('#dvmyDocuments').html("");
            $('#dvmyDocuments').html(data);
        }
    });
}

上面的代码不会向下面的方法发送任何令牌。

private void ValidateRequestHeader(HttpRequestBase request)
        {
            string cookieToken = string.Empty;
            string formToken = string.Empty;
            string tokenValue = request.Headers["VerificationToken"]; // read the header key and validate the tokens.
            if (!string.IsNullOrEmpty(tokenValue))
            {
                string[] tokens = tokenValue.Split(',');
                if (tokens.Length == 2)
                {
                    cookieToken = tokens[0].Trim();
                    formToken = tokens[1].Trim();
                }
            }

            AntiForgery.Validate(cookieToken, formToken); // this validates the request token.
        }
    }

在layout.cshtml中,我有代码来获取令牌。

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

变量tokenValue每次都捕获null。所以我理解的是通过标题我无法发送令牌值。我尝试了很多替代品。所以有人建议我如何克服这个问题?提前谢谢。

我尝试如下,我仍然获得空值。

var token = $('[name=__RequestVerificationToken]').val();
var headers = {};
headers["__RequestVerificationToken"] = token;
alert(token);
var forgeryId = JSON.stringify($("#forgeryToken").val());
function GetGrid() {
    $.ajax(
    {

        type: "GET",
        dataType: "html",

        cache: false,
        url: '/Dashboard/GetGridData',
        cache: false,
        headers: headers,
        success: function (data) {
            $('#dvmyDocuments').html("");
            $('#dvmyDocuments').html(data);
        }
    });
}

0 个答案:

没有答案