IRouteHandler в веб-формах:Маршрутизация запросов, требующих HttpContext.User

StackOverflow https://stackoverflow.com/questions/1534162

Вопрос

Я пытаюсь добавить довольно простой маршрут к приложению веб-форм Asp.Net (работающему под IIS 7, интегрированный режим):для запросов, поступающих в http://mydomain.com/foo/ Я хотел бы показать результаты динамической страницы (http://mydomain.com/foopage.aspx).

Я создал RouteHandler, который делает все это, и, похоже, маршрутизация выполняется правильно.

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
     var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/foo.aspx", typeof(MyApp.Web.Foo)) as MyApp.Web.Foo;
     return page as IHttpHandler;
    }

Проблема в том, что внутри метода GetHttpHandler моего RouteHandler все экземпляры текущего пользователя (requestContext.HttpContext.User, System.Web.HttpContext.Current.User) имеют значение null.К сожалению, foo.aspx должен знать, кто является текущим пользователем (для элементов управления входом, ролей и т. д.), поэтому при рендеринге страницы выдаются исключения нулевых ссылок.Я предполагаю, что эти обработчики маршрутов срабатывают до того, как Asp.Net получит возможность подключить HttpContext к информации пользователя.Есть идеи обходного пути?

PS. Я понимаю, что этого можно добиться, выполнив Server.Transfer на странице по адресу http://mydomain.com/foo/default.aspx.Я бы хотел использовать маршрутизацию для подобных вещей, а не иметь кучу бесполезных папок, загромождающих все.

Спасибо!

Это было полезно?

Решение 2

Мне удалось это выяснить самому.

Так же, как этот вопрос, мои маршруты работали нормально, когда источник маршрута заканчивался на .aspx (http://mydomain.com/foo-origin.aspx), но потерпели неудачу, когда они этого не сделали (http://mydomain.com/foo-origin/).

Статья MSDN о настройке маршрутизации с помощью веб-форм. говорит вам внести несколько изменений в веб-конфигурацию, но не указывает, что вам нужно установить runAllManagedModulesForAllRequests значение true в узле модулей:

<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
  </system.webServer>
</configuration>

Теперь это работает плавно.

Другие советы

Смотрите ответ на этот вопрос, очень похоже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top