Изменить корень файла для StaticFileHandler

#c# #asp.net #staticfilehandler

#c# #asp.net #staticfilehandler

Вопрос:

У меня есть ASP.NET веб-проект, который (помимо прочего) обслуживает некоторые статические файлы. По умолчанию платформа предполагает, что все пути к файлам относятся к местоположению веб-проекта. Однако я бы хотел, чтобы фактический корень загружался из пользовательских настроек в Web.config (например "C:MyStaticFiles" ).

Есть ли какой-либо способ изменить то, что StaticFileHandler считается корневым каталогом сервера? Если нет, есть ли простой способ реализовать IHttpHandler , который внесет это изменение и передаст остальную часть работы обычному StaticFileHandler ?

Ответ №1:

По соображениям производительности лучше использовать перезапись URL, а не связываться с HttpHandler. StaticFileHandler работает не так быстро, как IIS. Ваш собственный обработчик будет в 10 раз медленнее, чем StaticFileHandler, и, если вы не очень, очень хороший инженер, он, вероятно, приведет к утечке (или неправильной загрузке) памяти.

Вы можете вызвать контекст.Перепишите путь в событии BeginRequest (или PostAuthorizeEvent, если вы используете авторизацию URL) вашего HttpModule или HttpApplication, чтобы выполнить перезапись для выбранных типов файлов.

Комментарии:

1. Как я могу использовать перезапись URL-адреса, чтобы изменить корневую папку, из которой отправляются файлы? Эта папка находится за пределами папки веб-проекта. context.RewritePath все еще принимает виртуальный путь — он выдает ошибку, если вы пытаетесь указать ему абсолютный путь. Есть ли что-то подобное, что позволило бы мне изменить абсолютный физический путь?

2. Нет, вы должны настроить виртуальную папку IIS на физический путь, а затем использовать RewritePath, чтобы указать IIS там. Извините, я забыл упомянуть об этом.

Ответ №2:

Я думаю, что из соображений производительности не рекомендуется создавать другое сопоставление путей для статических ресурсов. Они могут обслуживаться IIS напрямую без каких-либо ASP.NET обработка, если они находятся в папке веб-сайта.