Маршрутизация ASP.NET - полностью ли пользовательские маршруты пропускают все в Global.asax? - PullRequest
2 голосов
/ 30 декабря 2008

У меня есть простое приложение для веб-форм ASP.NET 3.5 с пакетом обновления 1 (SP1) ... Я добавил библиотеку DLL System.Web.Routing и сделал простой маршрут, который возвращает стандартную страницу ASP.NET как «IHttpHandler». ».

Все хорошо ... за исключением того, что HttpContext.Current.User равен null ???

Итак, я немного покопался (я установил точки останова во всех событиях в файле Global.asax). Обычно эти точки останова попадают (когда я перехожу на стандартную страницу «.aspx»):

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

Но при использовании маршрутизации ASP.NET ... ни одно из этих событий не запускается. Я что-то упустил?

Ответы [ 4 ]

7 голосов
/ 12 января 2009

Предполагается, что вы используете 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. :)

-Todd

2 голосов
/ 30 декабря 2008

Нашел причудливый и странный (и глупый) ответ:)

Если вы не добавите «.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());

Как совершенно неубедительно :) ... но это, тем не менее, исправление!

0 голосов
/ 17 апреля 2009

я проверил переменную приложения и Viewstate, эти два явно работают .. не уверен насчет журналов сервера: S

0 голосов
/ 17 апреля 2009

Когда вы говорите

«Если вы не добавите« .aspx »в конец вашего маршрута, в Global.asax ничего не сработает, то есть вы не получите никаких BeginRequest, AuthenticateRequest, EndRequest и т. Д. не получается SessionState или что-нибудь. "

Будут ли IIS регистрировать такие запросы в файлах журналов или они просто анонимны? как насчет переменных приложения и ViewState?

извините, я еще не проверял, но просто спрашиваю, знаете ли вы уже?

...