【问题标题】:Html.AntiForgeryToken() still required?Html.AntiForgeryToken() 仍然需要吗?
【发布时间】:2015-09-06 17:24:25
【问题描述】:

在 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)

【问题讨论】:

    标签: asp.net-core-mvc antiforgerytoken


    【解决方案1】:

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

    【讨论】:

    • 从 MVC 6、Asp.net 5 RC1 开始,Tag Helper 是“asp-antiforgery”而不是“asp-anti-forgery”,不确定它是否已经如此或已更改。
      &lt;form asp-controller="Account" asp-action="Register" asp-antiforgery="false" method="post" class="form-horizontal" role="form"&gt;
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2015-02-18
    • 2011-09-09
    • 2015-05-21
    相关资源
    最近更新 更多