请告诉我为什么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; }
}
}
答案 0 :(得分:2)
会话状态不是HTTP基础结构的本机部分。这意味着请求将需要序列化/加载会话信息(来自内存或数据库或其他服务器),以获取需要访问会话的请求,并在完成后将其保存回来。
HttpHandler
是响应对ASP.NET http runtime
发出的请求而运行的进程(通常称为“端点”)。它用于在定义特定类型的对象/类/资源时处理它。如果该资源的处理不需要访问会话,则该特定请求不需要不必要地加载/保存会话数据。因此,默认情况下,会话不适用于HTTPhandlers,除非它是一个预定义的处理程序,如页面处理程序。
要成功解析对Session对象的任何调用,运行时环境必须将会话状态添加到正在处理的请求的调用上下文中,在这种情况下为IRequireSessionState
。
查看此msdn链接了解详情。
要回答您的问题,不,如果您不实施IRequireSessionState
,由于上述事实,您将无法访问处理程序类中的会话对象。
答案 1 :(得分:1)
如果未实现此接口,则无法成功使用会话对象。如果您想要访问会话,则应使用此界面,无论您如何访问它。
没有它就不行。如果确实如此,那就是侥幸,不要依赖它。
答案 2 :(得分:1)
除非使用IRequiresSessionState接口标记处理程序,否则ASP.NET SessionStateModule不会填充上下文的会话属性。