ответ

2

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

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

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

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

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

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

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

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

+0

Я перечитаю главу о HttpHandlers и попробую попробовать. Я очень ценю вашу помощь – SourceC

Смежные вопросы