URL-авторизация и типы файлов, не связанные с ASP.Net - PullRequest
0 голосов
/ 11 мая 2009


Авторизация URL-адреса относится только к типам файлов, связанных с Asp.Net? 1 Но почему она не может быть применена и к типам файлов не-Asp.Net?


Thanx

1 Ответ

2 голосов
/ 11 мая 2009

Это из-за карт сценариев для ASP.NET. Только некоторые расширения отображаются в ASP.NET. Остальные обрабатываются непосредственно IIS. Это сделано по соображениям производительности.

Есть два способа справиться с этим.

  1. Дублируйте ваши правила авторизации в файлах web.config в списках ACL файлов NTFS (то есть устанавливайте разрешения для папок и файлов напрямую). Убедитесь, что схема аутентификации пользователя соответствует учетным записям и группам, используемым для управления доступом ... другими словами, если вы используете SQL для хранения токенов имени пользователя, это не сработает, потому что эти токены не обязательно будут привязаны к пользователи домена и группы / роли.

  2. Создайте IHttpHandler для обслуживания файлов, не относящихся к ASP.NET. Из метода ProcessRequest вызовите метод Server.MapPath(url) для входящего URL-адреса, а затем выполните потоковую передачу файла, используя Response.WriteFile(filename). Возможно, вам сначала потребуется установить свойство ContentType. И (вот плохие новости), вам все равно может потребоваться выполнить декларативную или обязательную проверку доступа - просто наличие записей в файлах web.config может не работать. См. Пользовательская обработка ASP.NET с HTTP для получения дополнительной информации о написании собственного обработчика. Вероятно, это хорошая идея - создавать отдельные обработчики для каждого типа контента. Как только вы напишите один, вы увидите, как легко их сделать.

Вы можете попробовать (сам не пробовал) добавить элементы в файлы web.config, где у вас есть дополнительные элементы - используйте элемент , чтобы удалить унаследовал HttpHandler и добавил еще один на уровне подпапок (возможно, указывая на тот же класс?). Я не уверен, что это сработает, но стоит попробовать.

Наконец, если вы действительно не хотите проходить и выполнять всю эту работу, вы можете просто добавить дополнительные сопоставления расширений в IIS. Например, посмотрите на Как: зарегистрировать обработчики HTTP , вы можете добавить сопоставление для файлов .jpg в aspnet_isapi.dll (взгляните на существующие сопоставления для .aspx и т. Д.). Вам не нужно добавлять элемент HttpHandler в ваш web.config, потому что web.config уровня машины уже содержит эту запись:

<add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>

Обратите внимание, что на вашем сайте могут возникнуть серьезные проблемы с производительностью.

...