Как передать токен AntiForgery на контроллер без формы - PullRequest
0 голосов
/ 14 июня 2019

У меня есть эта функция jquery, и я хочу передать токен защиты от подделки контроллеру для проверки. Однако мой текущий метод возвращает ошибку 400 независимо от того, пропущу ли я ее через заголовок или тело.

Я положил эту пустую форму в верхней части моей страницы

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "form" }))
{
    @Html.AntiForgeryToken()
}

Это функция jquery. У меня есть запрос подтверждения в заголовке и теле, но он не работает.

$("#eventGenerateButton").on("click", function (e) {
    e.preventDefault();
    var event_form_data = {
        "__RequestVerificationToken": token,
        "StartDate": $("#eventStartDate").val(),
        "EndDate": $("#eventEndDate").val(),
    };

    $.ajax({
        url: "@Url.Action("GenerateEventLogsReport", @ViewContext.RouteData.Values["controller"].ToString())",
        method: "POST",
        headers: { "__RequestVerificationToken": token},
        xhrFields: {
            responseType: 'blob'
        },
        data: JSON.stringify(event_form_data),
        contentType: "application/json",
        success: function (result) {
            GenerateReport(result,"EventLogs");
        },
        error: function (error) {
            console.log(error);
        }
    });
    return false;
});

Это контроллер

[HttpPost]
[ValidateAntiForgeryToken]
public FileResult GenerateEventLogsReport([FromBody]GenericReportDateViewModel Input)
{

}

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Удалите токен из event_form_data, затем попробуйте отправить заголовок запроса как

var event_form_data = {
    "StartDate": $("#eventStartDate").val(),
    "EndDate": $("#eventEndDate").val(),
    };
var token = $('input[name="__RequestVerificationToken"]').val();
$.ajax({
    url: "/Home/AjaxPost",
    method: "POST",      
    headers: { "RequestVerificationToken": token},
    xhrFields: {
        responseType: 'blob'
    },
    data: JSON.stringify(event_form_data),
    contentType: "application/json",
    success: function (result) {

    },
    error: function (error) {
        console.log(error);
    }
});
0 голосов
/ 14 июня 2019

Попробуйте изменить подпись вашего контроллера следующим образом:

public FileResult GenerateEventLogsReport(string __RequestVerificationToken, string StartDate, string EndDate)
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...