2009-03-09 13 views
2

que j'ai un dossier virtuel/topFolder/dans IIS7, et dans ce dossier il peut y avoir un fichier qui peut être affiché dans un navigateur (xml, html, swf, doc, etc. - en général ressources "non managées" du point de vue d'IIS). Avant de donner la permission à la demande d'ouvrir un fichier sous le dossier, j'ai besoin de vérifier certaines variables de session afin de voir si l'utilisateur a une "licence" pour le sous-dossier et le fichier en question.fichiers statiques et l'authentification dans ASP.net

J'ai essayé d'implémenter un module avec les interfaces IHttpModule et IReadOnlySessionState, mais la session est toujours nulle sur l'événement AcquireRequestState lorsque le fichier est "statique" et non géré par IIS (comme aspx, ashx, etc.).

Si j'utilise un HttpHandler personnalisé, je reçois la séance, mais je dois aussi mettre en œuvre la façon dont le contenu est envoyé à la réponse. Edit: Puisque l'utilisateur ne télécharge pas le fichier, je veux juste que IIS serve le fichier comme il le fait avec son StaticFileModule. Le gestionnaire/module devrait vraiment être un StaticFileModuleWithAuthorizationHook ...

donc je veux vraiment faire ce qui suit: 1. demande/topFolder/*: vérifier session et licences etc a) Si ok, continuer le service de fichiers b) Si ce n'est pas le cas, interrompre la demande, ou simplement envoyer FORBIDDEN en réponse.

quelqu'un L'espoir peut aider.

Répondre

1

Vous devriez être en mesure de gérer cela via le HttpHandler, la manière simple est d'utiliser les méthodes intégrées pour envoyer le fichier vers le bas à l'utilisateur si elles ont accès.

This article (en bas) montre un exemple de la façon de le faire.

+0

Merci, mais c'est un peu différent. Imaginge l'URL http://myserver.com/topFolder/something/foo.html Je ne le télécharger, je servirai le fichier, mais seulement après que je l'ai vérifié et séance fait quelques allers-retours de la base de données. C'est essentiellement un répertoire virtuel ouvert qui devrait avoir une sécurité personnalisée. –

+0

Dans ce cas, il suffit de faire un response.writebytes et d'écrire le fichier, ne définissez pas l'en-tête pour définir la disposition du contenu et ça devrait aller! –

+1

Cela ne fonctionnera pas avec un contenu aléatoire. Si j'essaie cela avec un fichier .swf, le navigateur ne sait pas comment rendre, et le rend simplement comme des caractères binaires. Je veux juste que IIS rende/serve comme il le fait après mes contrôles, et ne se soucie pas de la façon dont le navigateur rend le contenu aléatoire. –

Questions connexes