2009-07-26 7 views
2

Dans un HttpModule je voudrais vérifier si l'URL se termine par un fichier:HttpModule/HttpApplication teste si url est une demande pour un fichier

ie. www.example.com/images/images.css

et quelle est l'extension de fichier. css ou js

Dans le gestionnaire d'événements Begin_Request, à l'aide de la propriété Url de l'objet Request imbriqué dans HttpApplication, je coupe actuellement l'extension de fichier à l'aide des opérations String. Y a-t-il une meilleure manière de faire cela?

Répondre

4

Le code ci-dessous devrait vous donner l'extension pour le fichier demandé.

private void context_BeginRequest(object sender, EventArgs e) 
{ 
    HttpApplication application = (HttpApplication)sender; 
    HttpContext context = application.Context; 

    string ext = System.IO.Path.GetExtension(context.Request.Path); 
    // ext will always start with dot 

} 

Mais contrairement à des types de fichiers tels que .aspx et types de fichiers tels que .ashx .js et .css que vous avez utilisé dans votre exemple ne sont pas par défaut enregistré avec le dll ASP.Net au sein de IIS quand ils sont demandés IIS ne passe pas la demande via le pipeline ASP.Net, donc pas HttpModules ou HttpHandlers s'exécuteront. La configuration de cette opération dépend de la version d'IIS utilisée.

0

Veuillez regarder les propriétés de HttpRequest.Url. C'est du type System.Uri.

+0

Merci pour votre réponse. J'ai regardé cela et je ne peux pas déterminer aucune fonctionnalité pour le faire, il y a une propriété IsFile mais ce n'est pas ce que je cherche. – theringostarrs

+0

Si je me trompe, veuillez le signaler! – theringostarrs

+0

Uri.LocalPath renverra le chemin. Vous devriez alors pouvoir utiliser les fonctions de System.IO.Path pour manipuler cela. –

0

Essayez ceci:

// get the URI 
Uri MyUrl = Request.Url; 
// remove path because System.IO.Path doesn't like forward slashes 
string Filename = MyUrl.Segments[MyUrl.Segments.Length-1]; 
// Extract the extension 
string Extension = System.IO.Path.GetExtension(Filename); 

Notez que Extension aura toujours le premier. ». par exemple. '.css' ou '.js'

1
 string url = context.Request.Path; 
     string extension = VirtualPathUtility.GetExtension(url); 
Questions connexes