asp.net-mvc - FilterAttributes 是否在 ASP.NET MVC 中缓存?

标签 asp.net-mvc ssl

我有 HTTPS 和 HTTP 问题。看来我的过滤属性正在被缓存。当我登录时,它应该自动将任何 http 页面发送到 https,它确实这样做了。然后,当我注销时,它保留在 https 上,这很好,但如果我尝试手动转到非 http 页面,即使我已登录,它也会再次重定向到 https 页面。 RequireSecure 始终为 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);
            }
        }
    }
}

最佳答案

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

简短摘录:

...In ASP.NET MVC 3, filters are cached more aggressively. Therefore, any custom action filters which improperly store instance state might be broken.

我建议存储对过滤器属性重要的数据:请求范围

filterContext.HttpContext.Items

作为 session 范围(就像您的情况一样):

filterContext.HttpContext.Session

filterContext.HttpContext.Profile

关于asp.net-mvc - FilterAttributes 是否在 ASP.NET MVC 中缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13655375/

相关文章:

Python-Requests : direct . pem 固定自签名证书

c# - 确保至少一个地址添加到数据库 - Entity Framework Code First

html - 在 AngularJS Html 中渲染 Razor 变量

java - 如何用java写一个HTTPS web服务客户端?

java - javax.xml.soap.SOAPConnection 和 java.mail 之间的冲突

java - 如何使用具有 480 位 key 长度的 Diffie-Hellman 获取 SSL 页面?

css - ASP.NET Core MVC - 未应用内联 css 样式

javascript - PDF在Safari中隐藏Jquery Modal

c# - 在 MVC 应用程序中显示/隐藏文本

java - SSL 异常 <kik.botframework.com>