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

前端之家收集整理的这篇文章主要介绍了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才能验证令牌。

猜你在找的asp.Net相关文章