Маршрутизация ASP.NET: пользовательские маршруты ПОЛНОСТЬЮ ПРОПУСКАЮТ все в Global.asax?
Вопрос
У меня есть простое приложение веб-форм ASP.NET 3.5 SP1...Я добавил DLL System.Web.Routing и создал простой маршрут, который возвращает стандартную страницу ASP.NET как «IHttpHandler».
Все хорошо...за исключением того, что HttpContext.Current.User нулевой ???
Итак, я еще немного покопался (поставил точки останова на все события в файле Global.asax).Обычно эти точки останова срабатывают (когда я перехожу на стандартную страницу «.aspx»):
- Приложение_BeginRequest
- Приложение_AuthenticateRequest
- Приложение_EndRequest
Но при использовании маршрутизации ASP.NET...ни одно из этих событий не срабатывает.Я что-то пропустил?
Решение
Предполагая, что вы используете IIS6, альтернативой является определение обработчика расширения «подстановочного знака».Добавление этого простого «объединяющего» сопоставления в IIS6 позволит ему обрабатывать ваши запросы без расширений.По умолчанию установщик .NET сопоставляет ".aspx" с aspnet_isapi.dll, поэтому расширение .aspx работает.Чтобы сопоставить запросы без расширения с механизмом APS.NET, вы должны указать IIS просмотреть каждый запрос.
Вот краткая статья, объясняющая этот процесс:
http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
Надеюсь, это поможет и уменьшит «хромой» фактор ваших URL-адресов.:)
-Тодд
Другие советы
Нашел причудливый и причудливый (и глупый) ответ :)
Если вы не добавите «.aspx» в конец своего маршрута, в Global.asax ничего не сработает, то есть вы не получите ни одного BeginRequest, AuthenticateRequest, EndRequest и т. д.Кроме того, вы не получаете SessionState или что-то в этом роде.
Итак, «исправление» заключалось в том, что я просто изменил свой маршрут:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler());
к этому:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler());
Как это совсем отстой :)...но все равно это поправимо!
Когда ты говоришь
«Если вы не добавите «.aspx» в конец своего маршрута, в Global.asax ничего не сработает, то есть вы не получите ни BeginRequest, ни AuthenticateRequest, EndRequest и т. д.Кроме того, вы не получите SessionState или что-то в этом роде».
Будет ли IIS регистрировать такие запросы в файлах журналов или они просто анонимны?а как насчет переменных приложения и ViewState?
извините, я еще не проверял, но просто спрашиваю, возможно, вы уже знаете?
я проверил переменную приложения и Viewstate, эти две, очевидно, работают..не уверен насчет журналов сервера :S