Подтвердить что ты не робот

Html.AntiForgeryToken() все еще требуется?

Требуется ли @Html.AntiForgeryToken() в ASP.NET.NET4.6 vNext?

Декорации формы изменились на

<form asp-controller="Account" 
      asp-action="Login" 
      asp-route-returnurl="@ViewBag.ReturnUrl" 
      method="post" 
      class="form-horizontal" 
      role="form">

Из этого

@using (Html.BeginForm("Login", 
                       "Account", 
                       new { ReturnUrl = ViewBag.ReturnUrl }, 
                       FormMethod.Post, 
                       new { @class = "", role = "form" }))

И больше не включайте этот

@Html.AntiForgeryToken()

Действия контроллера по-прежнему отмечены атрибутом ValidateAntiForgeryToken, как и ожидалось, поэтому, откуда именно оно происходит? Автомагически?

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
4b9b3361

Ответ 1

Помощник тега формы автоматически добавит токен анти-подделки. (Если вы не используете его как стандартный элемент формы html, вручную добавляете атрибут action). Проверьте исходный код вспомогательный элемент тега формы, в конце метода Process вы увидите следующее.

if (Antiforgery ?? antiforgeryDefault)
{
    var antiforgeryTag = Generator.GenerateAntiforgery(ViewContext);
    if (antiforgeryTag != null)
    {
        output.PostContent.AppendHtml(antiforgeryTag);
    }
}

Если вы проверите html страницы входа, вы увидите следующий скрытый ввод внутри формы:

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8BIeHClDdT9...">

Вы также можете вручную включить/отключить его, добавив атрибут asp-antiforgery:

<form asp-controller="Account" asp-action="Register" asp-antiforgery="false" method="post" class="form-horizontal" role="form">