ошибка с отправкой параметра javascript в шаблон действия asp net

Я делаю самый большой проект в своей жизни, и у меня есть ошибки, вот история: я сделал раскрывающийся список стран, когда вы выбираете страну из списка выбора, я использую javascript для отправки идентификатора страны в функцию состояния:

$("#Country").change(function () {
    var Index = $(this).val();
    $.ajax({
        url: '/Company/State',
        type: "POST",
        dataType: 'html',
        data: { CountryId: Index },
        success: function (data) {
            $('#State').empty();
            $('#State').append($('<option>').attr("value", "").text("Select state"));
            var state = JSON.parse(data)["state"];
            for (var i = 0; i < state.length; i++) {
                $('#State').append($('<option>').attr("value", state[i].id).text(state[i].name));
            }
        }
    });

и тогда мой выпадающий список не работает, и я получаю следующую ошибку, и мой выпадающий список ничего не показывает:

"Failed to load resource: the server responded with a status of 400 (Empty or invalid anti forgery header token.)"

и когда я отключаю antiforgerytoken, все работает отлично

 [HttpPost]
 [DisableAbpAntiForgeryTokenValidation]
 public string State(GetStateInput input)

есть мой вопрос:

Нам нужен токен защиты от подделок, и мы не можем его отключить, так как же мне преодолеть ошибку, не отключая токен защиты от подделок?


person masoud moazen    schedule 14.10.2017    source источник
comment
А какой у тебя вопрос?   -  person Backs    schedule 14.10.2017
comment
Нам нужен токен защиты от подделок, и мы не можем его отключить, так как я могу преодолеть ошибку, не отключая токен защиты от подделок   -  person masoud moazen    schedule 14.10.2017
comment
Возможный дубликат включить antiforgerytoken в ajax post ASP.NET MVC   -  person Backs    schedule 14.10.2017


Ответы (1)


Желательно добавить это в _Layout.cshtml или представление:

@{
    SetAntiForgeryCookie();
}

В качестве альтернативы перехватывать XMLHttpRequest:

(function (send) {
    XMLHttpRequest.prototype.send = function (data) {
        this.setRequestHeader(abp.security.antiForgery.tokenHeaderName, abp.security.antiForgery.getToken());
        return send.call(this, data);
    };
})(XMLHttpRequest.prototype.send);
person aaron    schedule 14.10.2017