2009-10-07 2 views
2

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

Я создал 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) равны нулю. К сожалению, foo.aspx должен знать, что такое текущий пользователь (для элементов управления входами, роли и т. Д.), Поэтому отображение страницы вызывает ненужные ссылочные исключения. Я предполагаю, что эти обработчики маршрутов увольняются, прежде чем Asp.Net получит возможность связать HttpContext с информацией о пользователе. Любая идея обходной работы?

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

Спасибо!

ответ

0

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

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

The MSDN article on setting up routing with web forms говорит вам, чтобы сделать некоторые изменения в веб-конфигурации, но оставляет то, что вам нужно установить runAllManagedModulesForAllRequests к истинным в узле модулей:

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

Сейчас он работает гладко.

0

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

Смежные вопросы