2009-10-12 8 views
2

J'ai ajouté un gestionnaire générique (ashx) dans mon projet mais je ne vois pas son enregistrement dans web.config et cela fonctionne. Comment venir ? Je veux dire que Visual Studio ne devrait pas l'ajouter en tant que gestionnaire http dans web.config? Ou c'est parce que je ne remplace pas les gestionnaires prédéfinis à la place je l'appelle spécifiquement.Generic Handler Enregistrement dans Web.Config

Répondre

6

En règle générale, le gestionnaire générique dans Asp.net est conçu pour prendre en charge une petite tâche comme la création de vignettes qui ne nécessitent pas le processus Asp.net. Ainsi, vous pouvez l'appeler comme appeler une page asp.net simple comme "www.somesite.com/Thumbnail.ashx?filename=abc.jpg". Par ailleurs, si vous voulez mapper ce gestionnaire avec une URL comme l'URL suivante.

  • www.somesite.com/Thumbnail/abc.jpg
  • www.somesite.com/Thumbnail/dog.jpg
  • www.somesite.com/Thumbnail/cat.jpg

Vous devez utiliser un routage d'URL comme le routage de formulaire Web (basé sur System.Routing) pour le mapper. Ainsi, vous pouvez utiliser le code suivant pour faire comme l'exemple ci-dessus.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Map("Thumbnail", "Thumbnail/{filename}").To("~/Thumbnail.ashx"); 
} 

Pour plus d'informations sur le mappage de formulaire Web, s'il vous plaît regarder Using Routing With Web Forms par Phil Haack.

Toutefois, si vous avez besoin de créer un gestionnaire Http qui peut gérer certains spécifier le type de fichier pour votre application comme gestionnaire de fichiers JavaScript. Vous devez créer une classe qui hérite de IHttpHandler. Après cela, vous devez l'enregistrer dans le fichier web.config pour spécifier le type de fichier géré par ce gestionnaire. S'il vous plaît regarder HTTP Handlers and HTTP Modules in ASP.NET Par Mansoor Ahmed Siddiqui

PS. Si vous utilisez un gestionnaire générique pour vous enregistrer dans le fichier web.config, vous devez créer deux fichiers, SomeHandler.ashx et SomeHandler.ashx.cs. C'est assez compliqué pour créer un gestionnaire de fichiers simple. D'autre part, vous pouvez créer un seul fichier cs qui hérite de la classe IHttpHandler pour faire la même chose.

+0

Merci, maintenant c'est logique. – Tarik

+0

Bonne explication 1 + ..... –

1

Un gestionnaire est juste un autre type de fichier que vous pouvez parcourir. Un module HTTP doit être enregistré dans un web.config, mais pas nécessairement un gestionnaire.

+0

Mais si je veux remplacer asp.net default httphandlers pour l'ensemble du projet alors je vais devoir l'enregistrer dans web.config non? – Tarik

+0

Je ne suis pas sûr à 100% de ce que vous demandez ... ajoutez-vous un gestionnaire qui a le même nom qu'un gestionnaire intégré? – Jonas

+0

Ou ajoutez-vous un gestionnaire destiné à être mappé à un chemin générique? IE, toute demande à * .foo devrait être dirigée vers votre gestionnaire? – Jonas

1

Je crois que vous pensez peut-être d'un module HTTP au lieu d'un HTTP gestionnaire

Un HTTP Module intercepte chaque requête HTTP sur le site et peut le cas échéant faire des opérations dans le pipeline HTTP ou intercepter l'appel entièrement. Les modules doivent être enregistrés dans le web.config

D'autre part, un HTTPHandler fonctionne de la même presque exactement comme une page ASPX, sauf qu'il est un peu plus léger et ne traite pas tous les événements de la page que vous faites pas besoin de quelque chose comme un gestionnaire d'image.

+0

Merci pour la bonne réponse mais en fait je ne confondais pas Httphandler avec httpModule Je sais un peu ce qu'ils étaient. Je demandais pourquoi je m'enregistre httphandler :) bien merci tho. – Tarik