Маршрутизация ASP.NET: пользовательские маршруты ПОЛНОСТЬЮ ПРОПУСКАЮТ все в Global.asax?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть простое приложение веб-форм 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

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