Forcing HttpHandler to use SessionState

限于喜欢 提交于 2019-12-11 05:22:18

问题


I am trying to customize a vended product that routes all requests through a HttpHandler. The handler analyzes the request to figure out what page to route the user to and performs a Server.Transfer(). Unfortunately, I need to access SessionState on a page and the handler doesn't implement IRequiresSessionState and is marked as internal so I can't inherit from it. After a lot of googling the best solution I found was to create an HttpModule that changes the handler that processes the request at different points in the request lifecycle. On PostMapRequestHandler I would change the handler that processes the request to my own that implements IRequiresSessionState and PostAcquireRequestState I would map it back.

This works but does anyone have a better solution?


回答1:


I figured out a more elegant way to enable session state. You can override the session state behavior of a handler. I created a module that forces session state.

public class SessionEnablerModule : IHttpModule
{
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.PostMapRequestHandler += new EventHandler(context_PostMapRequestHandler);
    }

    void context_PostMapRequestHandler(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;

        if ((app.Context.Handler.GetType().ToString().Equals("Handler I want to enable session state for")))
        {
            //enable session state
            app.Context.SetSessionStateBehavior(SessionStateBehavior.Required);
        }
    }
}



回答2:


Another solution could be to route all request through your handler that requires session state and then pass those requests to internal handler by invoking its ProcessRequest method - you can create the instance of internal handler by using say Reflection (or using handler factory if any).

However, using HttpModule to swap handlers is definitely a better solution. Because you can choose to swap the handler selectively by looking at the requested URL. That way, you may not have to load/save session state for all requests (that can be expensive operation for out-of-proc sessions)



来源:https://stackoverflow.com/questions/8248850/forcing-httphandler-to-use-sessionstate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!