【问题标题】:HttpContext.Current.Session is null in Ashx fileAshx 文件中的 HttpContext.Current.Session 为空
【发布时间】:2012-12-20 07:46:29
【问题描述】:

我看到了一些问题(HereHere),但他们没有回答我的问题。 我正在尝试使用“ajax.ashx”文件调用 Ajax,并在函数中访问会话。 由于某种原因,Session 对象本身的值为 null。

使用示例:

Session = HttpContext.Current.Session // This is null

或者:

public virtual void ProcessRequest(HttpContext context)
{
    System.Web.SessionState.HttpSessionState Session = context.Session; 
    // This is null
}

在 Web.config 中:

<sessionState timeout="1800"></sessionState>

【问题讨论】:

标签: c# asp.net .net session generic-handler


【解决方案1】:

您必须在处理程序的声明中添加IRequiresSessionState

public class YourHandleName : IHttpHandler, IRequiresSessionState 
{
...

默认情况下,处理程序不与会话连接以保持它们的最小化,通过添加 IRequiresSessionState 将它们附加到会话中。

【讨论】:

  • 请注意,这也可以被继承,如果您的所有 .ASHX.CS 类都继承自同一个类,并且该类具有 IRequiresSessionState 接口,您还可以在每个类中访问当前会话处理程序。
  • @StevendeSalas 好的,但据您所知,如果可以的话,最好避免会话,特别是在处理程序上,因为请求会话的页面或处理程序会锁定整个站点调用直到结束@ 987654321@
  • 从 asp.net 网站移动到网络应用程序对我造成了这种影响。我必须添加 IRequiresSessionState 才能使其工作。在进入网络应用程序之前,它在 asp.net 网站上运行良好。
  • 要使用“IRequiresSessionState”,我们需要包含“using System.Web.SessionState;”说明,只需添加更多细节。
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多