В одном из моих контроллеров метод действия не выполняется, если я украсил его атрибутом [ValidateAntiForgeryToken].
Дополнительная информация : У меня есть код бритвы, чтобы сгенерировать токен, который я получил из скрытого поля. Я включил его в мой вызов jQuery Ajax (который передает модель и другое значение в действие контроллера (AccountController.Login
). Он никогда не выполняет это действие. Что мне здесь не хватает?
Контроллер:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
...std MVC Identity Login code..
}
Разметка в представлении входа в систему (т. Е. Без тега) (который находится в модальном JQuery)
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" }))
{
@Html.AntiForgeryToken()
}
<div>...login markup</div>
<script type="text/javascript">
$(document).ready(function ()
{
$("#btnSubmit").on("click", function ()
{
var modeldata = { Email: $('#txtUserEmail').val(), Password: $('#txtPwd').val() };
var returnUrl = null;
var form = $('#__AjaxAntiForgeryForm');
var token = $('input[name="__RequestVerificationToken"]').val();
alert(token);
$.ajax({
url: "/Account/Login",
type: "POST",
data: { __RequestVerificationToken: token, model: modeldata, returnUrl: returnUrl },
async: false,
dataType: 'JSON', //do not use JSON , because the server is expecting the __RequestVerificationToken parameter to be part of the POST request payload
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
success: function (ViewResult)
{
if (ViewResult === "0")
{
window.location.href='@Url.Action("Index","Home")'
}
else
{
$('#dialogL').replaceWith(ViewResult);
}
}
});
});
});
</script>