Domanda

Sto cercando di aggiungere un percorso piuttosto semplice a un Asp.Net Web Form app (in esecuzione in IIS 7, modalità integrata): per le richieste di venire a http://mydomain.com/foo/ vorrei mostrare i risultati di una pagina dinamica ( http://mydomain.com/foopage.aspx ).

Ho creato un RouteHandler che fa tutto questo e sembra essere di routing in modo corretto.

    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;
    }

Il problema è che, dentro il mio metodo di GetHttpHandler RouteHandler, tutte le istanze dell'utente corrente (requestContext.HttpContext.User, System.Web.HttpContext.Current.User) sono nulli. Purtroppo, foo.aspx ha bisogno di sapere ciò che l'utente corrente è (per i controlli d'accesso, roba ruolo, ecc), in modo da rendere la pagina è generare eccezioni riferimento null. La mia ipotesi è che questi gestori di percorso stanno sparando fuori prima Asp.Net ottiene la possibilità di cablare il HttpContext con le informazioni dell'utente. Qualsiasi idea di un work-around?

PS - Mi rendo conto che questo può essere realizzato facendo una server.Transfer in una pagina a http: / /mydomain.com/foo/default.aspx . Mi piacerebbe utilizzare il routing per questo genere di cose, piuttosto che avere un gruppo di cartelle inutili ingombrare le cose.

Grazie!

È stato utile?

Soluzione 2

Sono riuscito a calcolare questo fuori me stesso.

Un po 'come questa domanda , miei percorsi funzionavano bene quando l'origine del percorso è conclusa in aspx ( http : //mydomain.com/foo-origin.aspx ), ma non è riuscito quando non hanno ( http://mydomain.com/foo-origin/ ).

L'articolo MSDN su come configurare il routing con moduli web racconta di apportare alcune modifiche al web di configurazione, ma lascia che è necessario impostare runAllManagedModulesForAllRequests a true nel nodo moduli:

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

Ora funziona a meraviglia.

Altri suggerimenti

Si veda la risposta al questa domanda , molto simile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top