Routing ASP.NET - I percorsi personalizzati SALTA COMPLETAMENTE Tutto in Global.asax?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho una semplice app Web Form ASP.NET 3.5 SP1 ... Ho aggiunto la DLL System.Web.Routing e ho creato un percorso semplice che restituisce una pagina ASP.NET standard come " IHttpHandler ".

Tutto bene ... tranne che HttpContext.Current.User è null ???

Quindi ho scavato un po 'di più (ho inserito i punti di interruzione in tutti gli eventi nel file Global.asax). Normalmente, questi punti di interruzione vengono colpiti (quando passo a una pagina standard "aspx"):

  • Application_BeginRequest
  • Application_AuthenticateRequest
  • Application_EndRequest

Ma, quando si utilizza il routing ASP.NET ... nessuno di questi eventi viene generato. Mi sto perdendo qualcosa?

È stato utile?

Soluzione

Supponendo che tu stia utilizzando IIS6, l'alternativa è definire un carattere jolly "quotato" gestore di estensione. Aggiungendo questo semplice " catch all " il mapping su IIS6 consentirà di elaborare le richieste senza estensione. Per impostazione predefinita, il programma di installazione .NET esegue il mapping di ".aspx" su aspnet_isapi.dll: ecco perché funziona l'estensione .aspx. Per mappare le richieste senza estensione al motore APS.NET, devi dire a IIS di guardare ogni richiesta .

Ecco un breve articolo che spiega il processo:

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

Spero che aiuti e riduca il "lame" fattore dei tuoi URL. :)

-Todd

Altri suggerimenti

Ho trovato la risposta bizzarra e bizzarra (e stupida) :)

Se non aggiungi " .aspx " fino alla fine del percorso, non viene generato nulla nel Global.asax, il che significa che non ottieni BeginRequest, AuthenticateRequest, EndRequest, ecc ... Inoltre, non ottieni SessionState o altro.

Quindi, la " fix " era per me cambiare il mio percorso da questo:

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

a questo:

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

Come completamente zoppo :) ... ma è comunque una soluzione!

Quando dici

" Se non aggiungi " .aspx " fino alla fine del percorso, non viene generato nulla in Global.asax, il che significa che non ottieni BeginRequest, AuthenticateRequest, EndRequest, ecc ... Inoltre, non ottieni SessionState o altro. "

IIS registrerà tali richieste nei file di registro o sono solo anonime? che dire delle variabili dell'applicazione e ViewState?

scusa se non l'ho ancora provato, ma ti sto solo chiedendo se potresti già saperlo?

Ho controllato la variabile dell'applicazione e Viewstate, questi due funzionano ovviamente .. non sono sicuro dei log del server: S

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