IRequiresSessionState – 我该如何使用它?

我需要能够在看到会话状态时进行更改。 我发现了IRequiresSessionState标记接口,但一直无法弄清楚如何使用它。 我想我可能会遗漏一些明显的东西。 你们其中一个C#guru会给我一个快速的1-2-3步骤(例如)吗?

  1. 创建一个新类,
  2. public interface IRequiresSessionState放入其中。
  3. 使用IRequiresSessionState('abra_cadabra')更改值。

  1. 要标记类,请在现有类名称中添加冒号并放置标记。 如果我有一个类: public class PageTools Marked,它看起来像public class PageTools : IRequiresSessionState或两个接口, public class PageTools : IRequiresSessionState, IHttpHandler 。 在我的情况下,我的class级只需要标记第一个。 我的经理需要两者。
  2. 如果右键单击刚刚输入的标记,则可以从菜单(visual studio)中选择implement ,并将必要的方法添加到您的课程中。 或者您可以查找它们并手动添加它们。
  3. 获得IRequiresSessionState标记后,您可以测试以查看会话状态是否为只读,如果是,则设置新的http处理程序。

     if (context.Handler is IReadOnlySessionState || context.Handler is IRequiresSessionState) { context.Handler = Handler(); } 
  4. http处理程序: MSDN将告诉你很多关于HttpHandlers和HttpModules的信息。 在我的情况下,我需要一个虚处理程序,以便我可以在通常只读( Page_PreInit )时访问会话状态。 所以在我的class上我添加了这个:

     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; } } } 

是对非常优雅的HttpModule类的引用,我从中获得了很多或者我使用过的内容。 我希望这可以帮助别人。

您只需从IRequiresSessionState派生HTTP Handler类以获取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; } } } 

IRequiresSessionState接口是一个标记接口,不包含任何方法,因此您无法按照问题的方式使用它。 您只在HTTP处理程序中实现接口,以确定处理程序需要对会话状态值的读写访问权限。

要了解如何在HTTP处理程序中实现它,请查看以下链接: http : //www.willasrari.com/blog/irequiressessionstate-and-dynamic-data-in-static-pages/000262.aspx