微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

@ 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才能验证令牌。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐