FilterAttributes是否在ASP.NET MVC中进行缓存?

时间:2012-12-01 01:09:24

标签: asp.net-mvc ssl

我遇到HTTPS和HTTP问题。看来我的filterattribute正在被缓存。当我登录时,它应该自动将没有http页面发送到https,它确实如此。然后当我退出时,它保持在https上,这很好,但是如果我尝试手动转到非http页面,即使我已登录,它也会再次重定向到https页面.DequireSecure始终为true,因为我的日志信息说明了是。 FilterAttributes是否被缓存,如果是,我该如何解决?

public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
    {
        protected static readonly NLogLogger Logger = new NLogLogger();

        public bool Ignore = false;
        public bool RequireSecure = false;

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
            {
                Logger.Info("Require HTTPS User Authenticated");

                RequireSecure = true;
            }

            if (filterContext.RequestContext.HttpContext.Request.IsLocal)
                RequireSecure = false;

            if (RequireSecure)
            {
                Logger.Info("Require HTTPS");

                base.OnAuthorization(filterContext);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您遇到的是正确的行为。详细信息可以在这里找到:

短摘录:

  

...在ASP.NET MVC 3中,过滤器被更积极地缓存。因此,任何不正确地存储实例状态的自定义操作过滤器都可能会被破坏。

我建议将filter attribute的重要数据存储到:请求范围

  

filterContext.HttpContext.Items

作为会话范围(就像你的情况一样):

  

filterContext.HttpContext.Session

     

filterContext.HttpContext.Profile