今天在工作编写代码时,在IHttpHandler的父类中使用了Session,在后台代码中调用该Session,但是抛出异常说该Session是Null,在网上查询相关资料说必须继承借口:IReadOnlySessionState 或 IRequiresSessionState,必须应用System.Web.SessionState命名空间
IHttpHandler:
// Summary:
// Defines the contract that ASP.NET implements to synchronously process HTTP
// Web requests using custom HTTP handlers.
public interface IHttpHandler
{
// Summary:
// Gets a value indicating whether another request can use the System.Web.IHttpHandler
// instance.
//
// Returns:
// true if the System.Web.IHttpHandler instance is reusable; otherwise, false.
bool IsReusable { get; }
// Summary:
// Enables processing of HTTP Web requests by a custom HttpHandler that implements
// the System.Web.IHttpHandler interface.
//
// Parameters:
// context:
// An System.Web.HttpContext object that provides references to the intrinsic
// server objects (for example, Request, Response, Session, and Server) used
// to service HTTP requests.
void ProcessRequest(HttpContext context);
}
IReadOnlySessionState:表示Http handler能够读取Session的值
// Summary:
// Specifies that the target HTTP handler requires only read access to session-state
// values. This is a marker interface and has no methods.
public interface IReadOnlySessionState : IRequiresSessionState
{
}
IRequiresSessionState:表示Http handler能够读写Session的值
// Summary:
// Specifies that the target HTTP handler requires read and write access to
// session-state values. This is a marker interface and has no methods.
public interface IRequiresSessionState
{
}
将继承IHttpHandler的类同时实现IRequiresSessionState 或 IReadOnlySessionState,即可使用Session,如下所示:
public class TestHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Session["TestSession = "TestSession";
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
}
即可解决IHttpHandler不能使用Session问题