#ajax #model-view-controller #csrf #.net-5
Вопрос:
Следуя всей документации и прочитав дюжину вопросов SO и статей третьих лиц, я ни за что на свете не могу понять, почему мои запросы CSRF терпят неудачу
мои службы настройки
...
services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
services.AddMvc();
services.AddSession(o =>
{
o.IdleTimeout = TimeSpan.FromMinutes(120);
});
services.AddAntiforgery();
...
Мое Действие Контроллера
public class TestController : Controller
{...
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult TestJSON([FromBody] JsonElement Event)
{ ...
Мой Взгляд
<body>
@Html.AntiForgeryToken();
</body>
Мой Аякс
var antiForgeryToken = $("input[name=__RequestVerificationToken]").val();
data = { 'Test': 'Test' };
var ajaxProps = {
url: '/Test/testJSON',
type: 'POST',
dataType: "JSON",
contentType: "application/json",
data: JSON.stringify(data),
success: function (response) {
if (response.success) {
console.log("Success!");
} else {
console.log(response.responseText);
}
},
error: function (response) {
console.log("error!");
}
}
ajaxProps.headers = {
"RequestVerificationToken": antiForgeryToken
};
$.ajax(ajaxProps);
В качестве примечания, если я удалю [ValidateAntiForgeryToken], данные будут получены правильно. Я могу проверить заголовки запроса и убедиться, что они установлены правильно в соответствии с документацией.
С включенным тегом validate я получаю ошибку 400 без подробных сведений об ответе.