2013-02-15 7 views
3

Nous utilisons la navigation répertoire sur une section spécifique de notre site Web, mais nos utilisateurs ne sont pas vraiment le répertoire par défaut ASP.NETlimitants HttpModule à traiter uniquement certaines demandes

de navigation. Pour être honnête, nous ne nous en soucions pas particulièrement non plus. Je suis tombé sur le module de navigation du répertoire personnalisé de mvolo et j'ai essayé de l'utiliser. Cependant, j'ai découvert que si je l'ai activé dans ma racine web.config, il permet la navigation de répertoire sur tous les dossiers sans une page par défaut (comme vous vous y attendez). Si je positionne enabled = "false" à la racine, il déclenche une exception HttpException qui est interceptée par ma page d'erreur générique, mais chaque requête provoque l'exception, comme lorsque la page demandée a des images supplémentaires à demander pendant le chargement. Comme je crois (et je peux me tromper), le module de navigation par défaut ne vérifie l'attribut activé que s'il n'y a pas de dossier par défaut et que vous ne demandez pas de fichier spécifique (par exemple, mysite.com/images/versus mysite.com/images/logo.gif). J'ai reconstruit la fonctionnalité du module personnalisé, mais je n'arrive pas à comprendre comment limiter le module à exécuter uniquement dans des situations où la navigation dans le répertoire serait nécessaire si elle était activée - et non pour chaque requête. Voici un morceau de code à partir du module:

public void Init(HttpApplication app) 
    { 
     app.PreRequestHandlerExecute += new EventHandler(this.OnPreRequestHandlerExecute); 
    } 

    public void OnPreRequestHandlerExecute(object source, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 
     config = (DirectoryListingConfigSection)WebConfigurationManager.GetSection("directoryBrowsing", context.Request.Path); 

     if (this.config == null) 
     { 
      throw new Exception("Missing <directoryBrowsing> configuration section."); 
     } 

     /* I only want to check this if it's necessary, not for things 
      like mysite.com/images/logo.gif or mysite.com/about/history.aspx 
      -- those shouldn't give a 403 error */ 
     if (!config.Enabled) 
     { 
      context.Response.Status = "403 Forbidden"; 
     } 

     /* The rest of the code goes below, and should only process 
      if Directory Browsing is necessary and enabled */ 
    } 

Répondre

2

Les modules sont executed on every request qui passe par le ASP.Net, il n'y a aucun moyen de limiter les appels au module en fonction du type de demande.

Vous devez créer des contrôles dans le code de votre module pour gérer uniquement les demandes qui présentent un intérêt pour ce module. Selon l'étape, vous devriez avoir accès à la plupart des informations sur la demande. Au cours de PreRequestHandlerExecute vous avez toutes les informations possibles sur la demande entrante, y compris l'URL, les en-têtes et l'état de la session associée si elle est présente.

+0

Je pensais que c'était le cas. Avez-vous des commentaires sur ce que je peux vérifier pour dire à mon module d'arrêter le traitement si une page par défaut ou un fichier spécifique est trouvé? Je sais que je pourrais techniquement utiliser l'URL pour voir si un ** fichier ** spécifique existe, mais la recherche d'un dossier générique (basé sur l'url) serait problématique, car IIS cherchera une page default.aspx, par exemple. Vous cherchez peut-être à voir si le fichier exact existe, et s'il n'y a pas d'extension, recherchez default.aspx, puis décidez si vous souhaitez passer à la navigation dans le répertoire? – Jeremy

+0

@Jeremy, je ne pense pas que quiconque puisse vous aider avec les conditions * que vous voulez vérifier * dans ce cas - vous devez décider de ce que vous voulez et mettre à jour la question (ou probablement poser une question séparée) si vous avez des problèmes informations dont vous avez besoin. Note complémentaire: la navigation dans les répertoires est un cauchemar potentiel pour la sécurité, alors assurez-vous d'avoir au moins brièvement réfléchi aux implications en matière de sécurité de l'activation/réimplémentation. –

+0

Merci pour votre contribution. Je vais devoir regarder comment limiter son traitement complet. Nous avons définitivement considéré les implications de l'utilisation de la navigation dans les répertoires. Peut-être que je vais chercher des alternatives, ou si je ne trouve pas l'information, poser une autre question concernant une alternative. – Jeremy

Questions connexes