gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:38 26 4
gpt4 key购买 nike

我对 HTTPS 和 HTTP 有疑问。看来我的过滤器属性正在被缓存。当我登录时,它应该自动将无 http 页面发送到 https,它确实这样做了。然后,当我注销时,它会保持在 https 上,这很好,但是如果我尝试手动转到非 http 页面,即使我已登录,它也会再次重定向到 https 页面。RequireSecure 始终为真,因为我的日志信息说明了这一点是。 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.

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

filterContext.HttpContext.Items

并且作为 session 范围(如您的情况):

filterContext.HttpContext.Session

filterContext.HttpContext.Profile

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com