IRequiresSessionState - 我该如何使用它?

Pra*_*gus 16 c# asp.net

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

  1. 创建一个新类,
  2. 放进去吧public interface IRequiresSessionState.
  3. 使用IRequiresSessionState('abra_cadabra')更改数值.

Pra*_*gus 12

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

    if (context.Handler is IReadOnlySessionState
        || context.Handler is IRequiresSessionState)
    {
        context.Handler = Handler();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 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; }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

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


Yoa*_*. B 9

您只需从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; }
    }
}
Run Code Online (Sandbox Code Playgroud)