2012-01-19 12 views
10

Ho un IHttpModule implementazione con un metodo delegato agganciato al PostAcquireRequestState, per ogni richiesta HTTP, vorrei sapere come verificare se la risorsa richiesta attuale è una pagina (aspx) discriminando tutte le altre risorse come *.css, *.ico, *.png e così via.Come verificare la risorsa di richiesta corrente è una pagina in C# ASP.NET?

In realtà posso effettuare le seguenti operazioni:

private static void OnPostAcquireRequestState(object sender, EventArgs e) 
{ 
    bool isPage = HttpContext.Current.Request.Path.EndsWith(".aspx"); 
} 

ma vorrei sapere se c'è qualcosa di diverso da fare che difficile il controllo con "aspx".

+0

Che dire di 'ashx, asmx, asx' e altri formati eseguibili sul lato server? – Abel

+0

@Abel, questa è la ragione per cui vorrei sapere se c'è * qualcosa di diverso da fare un controllo duro sul formato '" .aspx "' *. Grazie per aver evidenziato questo punto, dal momento che non l'ho messo sulla mia domanda. :) –

+0

Cosa stai cercando di ottenere? –

risposta

3

Una cosa che si potrebbe fare è ottenere un elenco di HTTP Handlers registrato e verificare se sono gestiti da una classe di sistema. Dando per scontato che non chiami le proprie classi in un namespace System.*, questo è infallibile abbastanza:

using System.Configuration; 
using System.Web.Configuration; 

Configuration config = WebConfigurationManager.OpenWebConfiguration("/"); 
HttpHandlersSection handlers = (HttpHandlersSection) config 
           .GetSection("system.web/httpHandlers"); 

List<string> forbiddenList = new List<string>(); 

// next part untested: 
foreach(HttpHandlerAction handler in handlers.Handlers) 
{ 
    if(handler.Type.StartsWith("System.")) 
    { 
     forbiddenList.Add(handler.Path); 
    } 
} 

In alternativa, è possibile ripristinare la ricerca e la lista tutti gestori esistenti ad eccezione di quelli nella vostra (o corrente) del dominio , possibilmente fornito alcune eccezioni (es., se vuoi sovrascrivere un gestore di immagini esistente). Ma qualunque cosa tu scelga, questo ti dà pieno accesso a ciò che è già registrato.


Nota: è generalmente più facile fare il contrario. Ora sembra che desideri inserire nella lista nera un paio di percorsi, ma invece, se puoi fare un whitelist (ovvero, creare un elenco di quelle estensioni che vuoi gestire da ) puoi renderlo molto più semplice.

Problemi correlati