关于IRequiresSessionState的用法

时间:2011-08-30 17:38:38

标签: asp.net

请告诉我为什么IHttpHandler需要实现IRequiresSessionState。没有实现它我们不能在会话变量中读/写任何东西? 我们不能像这样直接访问HttpContext.Current.session。 请解释.......谢谢

public class MyHttpHandler : IHttpHandler, IRequiresSessionState
{
   public void ProcessRequest(HttpContext context)
   {
       var MyValue = context.Session["MyKey"] as String;

       MyValue = "Hello World";

       context.Session["MyKey"] = MyValue;
   }

   public bool IsReusable
   {
       get { return true; }
   }
}

3 个答案:

答案 0 :(得分:2)

会话状态不是HTTP基础结构的本机部分。这意味着请求将需要序列化/加载会话信息(来自内存或数据库或其他服务器),以获取需要访问会话的请求,并在完成后将其保存回来。

HttpHandler是响应对ASP.NET http runtime发出的请求而运行的进程(通常称为“端点”)。它用于在定义特定类型的对象/类/资源时处理它。如果该资源的处理不需要访问会话,则该特定请求不需要不必要地加载/保存会话数据。因此,默认情况下,会话不适用于HTTPhandlers,除非它是一个预定义的处理程序,如页面处理程序。

要成功解析对Session对象的任何调用,运行时环境必须将会话状态添加到正在处理的请求的调用上下文中,在这种情况下为IRequireSessionState

查看此msdn链接了解详情。

要回答您的问题,不,如果您不实施IRequireSessionState,由于上述事实,您将无法访问处理程序类中的会话对象。

答案 1 :(得分:1)

如果未实现此接口,则无法成功使用会话对象。如果您想要访问会话,则使用此界面,无论您如何访问它。

没有它就不行。如果确实如此,那就是侥幸,不要依赖它。

答案 2 :(得分:1)

除非使用IRequiresSessionState接口标记处理程序,否则ASP.NET SessionStateModule不会填充上下文的会话属性。