加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 如何获取没有隐藏输入的AntiForgeryToken值

发布时间:2020-12-16 00:44:02 所属栏目:asp.Net 来源:网络整理
导读:@ Html.AntiForgeryToken() 呈现隐藏的输入 input name="__RequestVerificationToken" type="hidden" value="GuiNIwhIJZjINHhuS_8FenaFDXIiaE" / 如何才能获取令牌值? 没有这样的丑陋的代码: public static IHtmlString AntiForgeryTokenValue(this HtmlHe
@ Html.AntiForgeryToken()
呈现隐藏的输入
<input name="__RequestVerificationToken" type="hidden" value="GuiNIwhIJZjINHhuS_8FenaFDXIiaE" />

如何才能获取令牌值?
没有这样的丑陋的代码:

public static IHtmlString AntiForgeryTokenValue(this HtmlHelper htmlHelper) {
        var field = htmlHelper.AntiForgeryToken().ToHtmlString();
        var beginIndex = field.IndexOf("value="") + 7;
        var endIndex = field.IndexOf(""",beginIndex);
        return new HtmlString(field.Substring(beginIndex,endIndex - beginIndex));
    }

解决方法

MVC的反CSRF功能实际上取决于两个令牌:一个是隐藏的表单元素,另一个是cookie。所以Html.AntiForgeryToken()帮助器不只是返回一个HTML片段。它也有一个副作用设置这个cookie。请注意,cookie值和表单值不相等,因为它们各自编码不同的信息。

如果您使用AntiForgery.GetTokens API,则此方法将返回原始令牌,而不是生成HTML代码段。该方法的参数有:

> oldCookieToken:如果请求已经包含反CSRF cookie令牌,请在此处提供。此参数可能为null。
> newCookieToken(out参数):如果oldCookieToken为null或没有表示有效的反CSRF cookie令牌,则此参数将使用您应该放在响应cookie中的值来填充。如果oldCookieToken表示一个有效的反CSRF令牌,那么当该方法返回时,newCookieToken将包含null,并且您不必设置响应cookie。
> formToken(out参数):当返回到服务器时,此参数将使用表单体中应该存在的令牌来填充。这是在调用Html.AntiForgeryToken()时最终被隐藏的输入元素包装的值。

如果您使用此API手动生成cookie和表单令牌,则需要调用AntiForgery.Validate的the corresponding overload才能验证令牌。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读