我需要能够在看到会话状态时进行更改。我发现了IRequiresSessionState
标记界面,但未能弄清楚如何使用它。我想我可能会遗漏一些明显的东西。你们其中一个C#guru会给我一个快速的1-2-3步骤(例如)吗?
public interface IRequiresSessionState
放入其中。 IRequiresSessionState('abra_cadabra')
更改值。答案 0 :(得分:12)
public class PageTools
标记为:public class PageTools : IRequiresSessionState
或两个接口public class PageTools : IRequiresSessionState, IHttpHandler
。在我的情况下,我的班级只需要标记第一个。我的经纪人需要两个。implement
,并将必要的方法添加到您的班级。或者您可以查找它们并手动添加它们。获得IRequiresSessionState标记后,您可以测试会话状态是否为只读,如果是,则设置新的http处理程序。
if (context.Handler is IReadOnlySessionState
|| context.Handler is IRequiresSessionState)
{
context.Handler = Handler();
}
http处理程序: MSDN 会告诉您很多关于HttpHandlers和HttpModules的信息。在我的情况下,我需要一个虚拟处理程序,以便在通常只读(Page_PreInit
)时可以访问会话状态。所以在我的课上我添加了这个:
protected IHttpHandler Handler()
{
MyHttpHandler resourceHttpHandler = HttpContext.Current.Handler
as MyHttpHandler;
if (resourceHttpHandler != null) // set the original handler back
{
return resourceHttpHandler.OriginalHandler;
}
// at this point session state should be available
return HttpContext.Current.Handler;
}
public class MyHttpHandler : IHttpHandler, IRequiresSessionState
{
internal readonly IHttpHandler OriginalHandler;
public MyHttpHandler(IHttpHandler originalHandler)
{
OriginalHandler = originalHandler;
}
public void ProcessRequest(HttpContext context)
{
// do not worry, ProcessRequest() will not be called,
// but let's be safe
throw new InvalidOperationException(
"MyHttpHandler cannot process requests.");
}
public bool IsReusable
{
// IsReusable must be set to false since class has a member!
get { return false; }
}
}
Here 是对非常优雅的HttpModule类的引用,我从中获得了很多或者我使用过的内容。我希望这可以帮助别人。
答案 1 :(得分:9)
您只需从 IRequiresSessionState 派生 HTTP处理程序类即可获得SessionState访问权。
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; }
}
}
答案 2 :(得分:2)
IRequiresSessionState
界面是一个标记界面,不包含任何方法,因此您无法按照问题的方式使用它。您只在HTTP处理程序中实现接口,以识别处理程序需要对会话状态值的读写访问权。
要了解如何在HTTP处理程序中实现它,请查看以下链接:http://www.willasrari.com/blog/irequiressessionstate-and-dynamic-data-in-static-pages/000262.aspx