2008-12-30 6 views
2

J'ai une simple application ASP.NET 3.5 SP1 Web Forms ... J'ai ajouté la DLL System.Web.Routing, et j'ai fait une route simple qui renvoie une page ASP.NET standard en tant que "IHttpHandler" .Routage ASP.NET - Faire des routes personnalisées SAUTER COMPLÈTE Tout dans le Global.asax?

Tout est bon ... sauf que HttpContext.Current.User est null ??? Donc, j'ai creusé un peu plus (j'ai mis des points d'arrêt dans tous les événements du fichier Global.asax). Normalement, ces points d'arrêt frappés (lorsque je navigue sur une page standard ".aspx"):

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

Mais, lors de l'utilisation de routage ASP.NET. .. aucun de ces événements ne tire. Est-ce que je manque quelque chose?

Répondre

7

En supposant que vous utilisez IIS6, l'alternative est de définir un gestionnaire d'extension "wild card". L'ajout de ce mappage simple "attraper tout" à IIS6 lui permettra de traiter vos demandes sans extension. Par défaut, le programme d'installation .NET mappe ".aspx" à aspnet_isapi.dll, c'est pourquoi l'extension .aspx fonctionne. Pour mapper des demandes sans extension au moteur APS.NET, vous devez indiquer à IIS de regarder chaque demande.

Voici un article rapide qui explique le processus:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

L'espoir qui aide et réduit le facteur « boiteux » de vos URL. :)

-Todd

2

trouvé la réponse :)

fantasque et bizzare (et stupide) Si vous ne pas ajouter « .aspx » à la fin de votre itinéraire, les feux de rien dans le Global.asax, ce qui signifie que vous n'avez pas obtenir n'importe quel BeginRequest, AuthenticateRequest, EndRequest, etc ... En outre, vous ne recevez pas SessionState ou quoi que ce soit.

Ainsi, la "solution" a été pour moi de changer juste ma route de ceci:

RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler()); 

à ceci:

RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler()); 

Comment complètement boiteux :) ... mais il est une solution toutefois!

+1

version de IIS? Si ce n'est pas sur IIS7, vous n'avez pas de pipeline intégré. – AnthonyWJones

0

Quand vous dites

« Si vous n'ajoutez pas » .aspx » à la fin de votre itinéraire, les feux de rien dans le Global.asax, ce qui signifie que vous n'avez pas obtenir n'importe quel BeginRequest, AuthenticateRequest, EndRequest, etc ... En outre, vous ne recevez pas SessionState ou quoi que ce soit. "

Est-ce que IIS consignera ces demandes dans les fichiers journaux ou sera-t-elle anonyme? qu'en est-il des variables d'application et de ViewState?

désolé je ne l'ai pas encore testé, mais juste demander si vous le savez déjà?

0

j'ai vérifié variable d'application et Viewstate, ces deux travaillent évidemment .. pas sûr de journaux de serveur: S