2015-06-20 104 views
15

请问@Html.AntiForgeryToken()在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) 

回答

32

表单标签助手会自动添加防伪造令牌。 (除非您将其用作标准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"> 
+4

从MVC 6开始,Asp.net 5 RC1 Tag Helper是“asp-antiforgery”而不是“asp-anti-forgery”,不知道它是否已经是这样或者已经改变了。
'

' –

相关问题