Сеанс модуля HTTP не устанавливается на странице без расширений - PullRequest
3 голосов
/ 26 октября 2010

У меня есть модуль HTTP, который я написал, который должен получить доступ к сеансу. Я сделал следующее:

  • Модуль зарегистрирован в web.config
  • Модуль присоединяет мой вызов метода к событию PostAcquireRequestState
  • Модуль, реализующий IRequiresSessionState

Однако, когда моя страница не имеет расширения (то есть, как при htp: //www.mywebsite.com), сеанс недоступен, и мой код завершается ошибкой. Если страница имеет расширение aspx, тогда все в порядке.

Ответы [ 3 ]

0 голосов
/ 27 октября 2010

Код из следующего потока делает свое дело ( 1 ):

public class Module : IHttpModule, IRequiresSessionState
{
    public void Dispose()
    {
    }

    void OnPostMapRequestHandler(object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;

        if (app.Context.Handler is IReadOnlySessionState || app.Context.Handler is IRequiresSessionState)
            return;

        app.Context.Handler = new MyHttpHandler(app.Context.Handler);
    }

    void OnPostAcquireRequestState(object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;

        MyHttpHandler resourceHttpHandler = HttpContext.Current.Handler as MyHttpHandler;

        if (resourceHttpHandler != null)
            HttpContext.Current.Handler = resourceHttpHandler.OriginalHandler;
    }

    public void Init(HttpApplication httpApp)
    {
        httpApp.PostAcquireRequestState += new EventHandler(OnPostAcquireRequestState);
        httpApp.PostMapRequestHandler += new EventHandler(OnPostMapRequestHandler);
    }

    public class MyHttpHandler : IHttpHandler, IRequiresSessionState
    {
        internal readonly IHttpHandler OriginalHandler;

        public void ProcessRequest(HttpContext context)
        {
            throw new InvalidOperationException("MyHttpHandler cannot process requests.");
        }

        public MyHttpHandler(IHttpHandler originalHandler)
        {
            OriginalHandler = originalHandler;
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }
}
0 голосов
/ 27 октября 2010

Оказывается, это проблема II7, см. Здесь:

http://forum.umbraco.org/yaf_postst9997_ContextSession-always-null-on-top-umbraco-page.aspx

0 голосов
/ 26 октября 2010

Вам нужен элемент, который обрабатывается ASP.NET, чтобы ваш модуль был частью жизненного цикла запроса.Обслуживание страницы, такой как index.html, этого не сделает.Страница ASPX будет.

...