我对 ASP.NET MVC 缓存和授权感到困惑,急需一些澄清。
我自制的授权属性继承自AuthorizeAttribute
. 它的覆盖AuthorizeCore
方法每次都会运行,即使我[OutputCache]
在控制器操作上设置了一个属性。我理解那部分。
现在让我费解的是:当我实际进行输出缓存并且页面从缓存中提供时,每次AuthorizeCore
都会失败。原因是当请求被缓存时,httpContext.Session
提供的AuthorizeCore
是null
!? 这是一些简化的代码:
protected override bool AuthorizeCore(HttpContextBase httpContext) {
return (Session["userId"] != null)
}
所以 if httpContext.Session
is null
,这显然每次都失败。我需要访问会话,我还能如何检查请求是否被授权?这没有任何意义 - 如果它应该是这样,那么我将永远无法在 ASP.NET MVC 中使用缓存页面和身份验证。帮助?