ASP.NET .NET4.6 vNext中是否还需要@Html.AntiForgeryToken()
?
表单装饰已更改为
<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)
答案 0 :(得分:40)
表单标记助手将自动添加防伪标记。 (除非您将其用作标准html表单元素,否则手动添加action
属性)。检查form tag helper的源代码,您会在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">