【问题标题】:How is it possible that Session is null in the AuthorizeAttribute.AuthorizeCore method?AuthorizeAttribute.AuthorizeCore 方法中的 Session 怎么可能为空?
【发布时间】:2012-10-08 12:02:59
【问题描述】:

我有一个继承自AuthorizeAttribute 的自定义属性类。有时参数httpContext.Session 为空。这怎么可能?只要我登录/活跃,会话就应该是活跃的,对吗?我没有浏览 20 分钟或更长时间,实际上我只是浏览了 0-2 分钟,有时 Session 属性为空。

自从我们从 MVC 2 (.NET 3.5) 切换到 MVC 4.5 (.Net 4.5) 后,我们遇到了这个错误。这可能是问题的原因吗?

我该如何解决这个问题?

【问题讨论】:

  • 放置一个条件断点并找出何时/如何调用它。
  • @HenkHolterman 我确实放置了一个条件断点,但我没有调用堆栈。它只是说“[外部代码]”,最重要的是断点所在的行。
  • 您可以从上下文中学到什么?特别是。请求的目标。
  • @HenkHolterman 我不知道你到底是什么意思,但在 HttpContext.Current 中是 Session null

标签: c# asp.net-mvc session asp.net-mvc-migration


【解决方案1】:

这怎么可能?

如果您禁用了会话状态,可能会发生这种情况。为了禁用会话状态,您可以在 web.config 中包含以下内容:

<sessionState mode="Off" />

或者您可以使用 [SessionState] 属性装饰您的控制器/基本控制器/动作:

[SessionState(SessionStateBehavior.Disabled)]
public class HomeController : Controller
{
    ...
}

【讨论】:

  • 我没有sessionState mode="Off" 一切都设置为“InProc”。我也没有 SessionState 属性
【解决方案2】:

这可能是缓存问题。尝试覆盖:

OnCacheAuthorization

在过滤器中。 或删除:

OutputCache

来自控制器中动作的属性。

【讨论】:

  • 一个关于如何覆盖它以及它将获得什么的演示,在这里会很方便。这是如何运作的?当你从OnCacheAuthorization返回HttpValidationStatus.Invalid时,那么AuthorizeCore根本就没有被调用?
  • 好的。我发现:在这里搜索OnCacheAuthorization(HttpContextBase httpContext)github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/…。干杯! :)
  • 那么,如果必须为缓存操作验证会话,他会怎么做呢?会话对象未在 OnCacheAuthorization 内初始化。我的情况不需要这样做,但如果需要呢?这不可能吗? :o
  • 很抱歉,这有点太远了,我无法记住细节。我希望你能解决你的问题。
  • @RomaineCarter 我认为最简单的解决方法是在动作中自己实现一些缓存机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多