Routage ASP.NET - Les itinéraires personnalisés omettent-ils COMPLETEMENT tout dans le fichier Global.asax?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai une simple application Web Forms ASP.NET 3.5 SP1 ... J'ai ajouté la DLL System.Web.Routing et créé une route simple qui renvoie une page ASP.NET standard sous la forme " IHttpHandler ".

Tout va bien ... sauf que HttpContext.Current.User est null ???

Alors, 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 sont touchés (lorsque je navigue vers une page ".aspx" standard):

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

Mais, lorsque vous utilisez le routage ASP.NET ..., aucun de ces événements ne se déclenche. Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Si vous utilisez IIS6, vous pouvez également définir un "caractère générique". gestionnaire d'extension. Ajouter ce simple " attraper tout " le mappage vers 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 requêtes sans extension vers le moteur APS.NET, vous devez indiquer à IIS d'examiner chaque requête .

Voici un article rapide expliquant le processus:

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

L’espoir qui aide et réduit les "boiteux" facteur de vos URL. :)

-Todd

Autres conseils

Trouvé la réponse bizarre et bizarre (et stupide):

Si vous n'ajoutez pas ". .aspx " à la fin de votre itinéraire, rien ne se déclenche dans le fichier Global.asax, ce qui signifie que vous n’obtenez pas de BeginRequest, AuthenticateRequest, EndRequest, etc. En outre, vous n’obtenez pas SessionState ou quoi que ce soit.

Ainsi, le "correctif" était pour moi de changer mon itinéraire à partir 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 nul :) ... mais c'est une solution sans faille!

Quand vous dites

"Si vous n'ajoutez pas" .aspx " à la fin de votre itinéraire, rien ne se déclenche dans le fichier Global.asax, ce qui signifie que vous n’obtenez ni BeginRequest, AuthenticateRequest, EndRequest, etc. En outre, vous n’obtenez pas SessionState ni rien.

IIS consigne-t-il de telles demandes dans les fichiers journaux ou est-il simplement anonyme? Qu'en est-il des variables d'application et de ViewState?

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

J'ai vérifié la variable d'application et Viewstate, ces deux fonctionnent évidemment .. pas sûr des journaux du serveur: S

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top