AntiForgeryConfig.CookieName与HttpContext.Request.Cookies不一致 - 为什么?

时间:2012-10-11 13:42:45

标签: asp.net-mvc-3 antiforgerytoken

我们有一个用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__

  4. 问题:不是那两个应该是相同的,所以我可以使用以下代码段来获取Cookie吗?

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

1 个答案:

答案 0 :(得分:2)

默认cookie名称在MVC 3和MVC 4之间更改。在MVC 3中,默认cookie名称包含“Lw”,并且在末尾附近有额外的下划线。你能否确认这个cookie是由MVC 4应用程序而不是MVC 3应用程序生成的?