IRouteHandler dans les formulaires Web: demandes de routage qui nécessitent HttpContext.User

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

Question

Je suis en train d'ajouter une route assez basique à une application Web Forms Asp.Net (en cours d'exécution sous IIS 7, mode intégré): pour les demandes à venir http://mydomain.com/foo/ Je voudrais montrer les résultats d'une page dynamique ( http://mydomain.com/foopage.aspx ).

J'ai créé un RouteHandler qui fait tout cela et il semble être le routage correctement.

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
     var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/foo.aspx", typeof(MyApp.Web.Foo)) as MyApp.Web.Foo;
     return page as IHttpHandler;
    }

Le problème est, dans ma méthode de GetHttpHandler RouteHandler, toutes les instances de l'utilisateur actuel (requestContext.HttpContext.User, System.Web.HttpContext.Current.User) sont nuls. Malheureusement, foo.aspx a besoin de savoir ce que l'utilisateur actuel est (pour les contrôles de connexion, des trucs de rôle, etc.), rendant ainsi la page est de lancer des exceptions de référence nulles. Je pense que ces gestionnaires d'itinéraire tirent avant de Asp.Net a la chance de câbler HttpContext avec des informations utilisateur. Toute idée d'un travail autour?

PS - Je sais que cela peut être accompli en faisant une Server.Transfer dans une page http: / /mydomain.com/foo/default.aspx . Je voudrais utiliser le routage pour ce genre de chose plutôt que d'avoir un tas de dossiers inutiles qui encombrent les choses.

Merci!

Était-ce utile?

La solution 2

J'ai réussi à comprendre cela moi-même.

Tout comme ce question, mes routes travaillaient très bien lorsque l'origine de la route a pris fin en .aspx rel="nofollow noreferrer"> http : //mydomain.com/foo-origin.aspx ), mais a échoué quand ils ne l'ont pas ( http://mydomain.com/foo-origin/ ).

L'article MSDN sur la configuration de routage avec des formulaires Web raconte vous de faire quelques changements à config web, mais laisse que vous devez définir runAllManagedModulesForAllRequests à true dans le nœud modules:

<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
  </system.webServer>
</configuration>

Maintenant, il fonctionne à merveille.

Autres conseils

Voir la réponse à cette question , très similaire.

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