2009-04-26 7 views
0

J'ai besoin de mon nouveau projet pour mettre à disposition des ressources "cachées" (en fait, juste stockées dans le répertoire App_Data) après une certaine date. Avant cela, ils devraient agir comme s'ils n'étaient pas là.asp.net gestionnaires et extensions - est-ce que je le fais incorrectement?

J'ai fait ce genre de chose une centaine de fois avec l'objet Page, mais lorsque j'ai commencé à travailler sur ce sujet, j'ai pensé que je m'intéresserais aux gestionnaires. N'ayant jamais travaillé avec eux (et étant un peu intimidé par eux), j'étais heureux de constater qu'ils serviraient mes fichiers XML et JPG sans le surcoût de toute la classe Page. Déjà, je suis heureux que je l'ai considéré. Je l'ai écrit pour gérer des fonctionnalités comme "MyHandler.ashx? Secretfile = blah.xml", et cela a bien fonctionné.

Ensuite, j'ai commencé à regarder la gestion spéciale des extensions, de sorte qu'une requête pour "blah.xml.secret" soit récupérée par le gestionnaire et renvoie blah.xml après avoir vérifié la date. Quelques lumières se sont allumées dans ma tête, et j'ai retravaillé le code pour qu'il traite cette affaire. Cela a fonctionné (dans l'IDE)! J'étais plutôt excité. L'obtenir sur le serveur de dev (IIS) était un peu différent: je devais enregistrer .secret en tant que type de .NET (pas de gros problème), et cela ne fonctionnait toujours pas jusqu'à ce que je désélectionne le "vérifier le fichier existe "case à cocher. (blah.xml.secret n'existe évidemment pas: blah.xml le fait, mais pas à l'endroit où il est demandé, seulement dans le répertoire sécurisé App_Data.) Ce n'est pas une grosse affaire, mais maintenant ma solution intelligente repose sur deux implémentations détails du côté IIS. Donc, ma question est la suivante: est-ce que c'est l'utilisation prévue des gestionnaires dans ASP.NET? Est-ce que je déforme cela au-delà de la reconnaissance? J'ai l'impression d'avoir vu des sites faire des trucs comme ça par le passé, mais pour la seule chose que j'essaie de faire, les changements IIS semblent trop compliqués. Dans mes recherches sur ce sujet, je n'ai pas trouvé de guide slam dunk 1-2-3 pour utiliser des handlers qui incluaient un exemple comme celui-ci, donc ça me fait penser que je suis peut-être en train de l'abuser ou de me tromper.

Répondre

2

Oui, c'est à peu près comme ça que ça fonctionne. (Dans Windows Server 2008, il existe une faible chance que vous puissiez effectuer les réglages à partir de web.config afin de ne rien modifier dans IIS.)

Si vous utilisez un poste qui n'est pas déjà enregistré être géré par le moteur ASP.NET, vous devez l'enregistrer. Si vous utilisez une extension qui est déjà gérée par ASP.NET, comme .aspx, vous n'avez rien à enregistrer dans IIS. (Lorsque vous l'exécutez dans le serveur Web intégré dans Visual Studio, tout est déjà géré par ASP.NET, c'est pourquoi cela fonctionne.)