0

我们有一个用 ASP.NET MVC 3 编写的应用程序,它使用@Html.AntiForgeryToken().

我们想在我们的自定义属性中验证令牌(不需要指定默认属性[ValidateAntiForgeryToken])。这应该很简单,但我发现了一个有趣的不一致之处。

  1. 下面的所有代码都在以下方法中运行:

    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public class ValidateJsonAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
    {  
        public void OnAuthorization(AuthorizationContext filterContext)
        {
        ...
    
  2. AntiForgeryConfig.CookieName值为__RequestVerificationToken。这似乎是有道理的。

  3. filterContext.HttpContext.Request.Cookies包含 1 个 cookie - 但它的名称是__RequestVerificationToken_Lw__.

问题:这两个不应该是相同的,所以我可以使用以下代码段来获取 cookie?

var cookie = filterContext.HttpContext.Request.Cookies[AntiForgeryConfig.CookieName];
4

1 回答 1

2

默认 cookie 名称在 MVC 3 和 MVC 4 之间发生了变化。在 MVC 3 中,默认 cookie 名称包含“Lw”和接近末尾的额外下划线。您能否确认 cookie 是由 MVC 4 应用程序而不是 MVC 3 应用程序生成的?

于 2012-10-12T03:09:32.217 回答