我遇到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);
}
}
}
}
答案 0 :(得分:2)
您遇到的是正确的行为。详细信息可以在这里找到:
短摘录:
...在ASP.NET MVC 3中,过滤器被更积极地缓存。因此,任何不正确地存储实例状态的自定义操作过滤器都可能会被破坏。
我建议将filter attribute
的重要数据存储到:请求范围
filterContext.HttpContext.Items
作为会话范围(就像你的情况一样):
filterContext.HttpContext.Session
filterContext.HttpContext.Profile