ihttphandler для записи файла в том виде, в каком он есть
-
19-09-2019 - |
Вопрос
Я пишу класс, который наследуется от IHttpHandler для объединения сценариев и CSS.Я хочу комбинировать только в том случае, если в строке запроса определен специальный параметр.Если этот параметр не определен, я хочу записать содержимое файла так, как будто обработчик даже не задействован.Как лучше всего доставить файл целым и невредимым?
ЭИДТ:
Единственная проблема, с которой я столкнулся, заключается в том, что у меня на странице есть тег сценария, который ссылается на сценарий в виртуальном каталоге, но страница, на которой я нахожусь, находится в подкаталоге приложения.
Страница, с которой ссылается сценарий управления, находится по адресу webserver/Admin/Default.aspx.Когда я обращаюсь к объекту Request в классе, который реализует IHttpHandler, все свойства пути к файлу следующие:веб-сервер/Администратор/~/SharedScripts/control.js.Как мне это решить?
Решение
Вы можете проверить параметр строки запроса в методе ProcessRequest(HttpContext context) следующим образом:
context.Request.QueryString["paramertername"]
Если вы хотите передать запрошенный файл в потоковом режиме как есть, вы можете сделать следующее:
string physicalFilePath = context.Request.PhysicalPath;
string fileContent = string.Empty;
// Determine whether file exists
if (File.Exists(physicalFilePath))
{
// Read content from file
using (StreamReader streamReader = File.OpenText(physicalFilePath))
{
fileContent = streamReader.ReadToEnd();
}
}
context.Response.Output.Write(convertedFile);
context.Response.Flush();
ПС:Вы также можете ознакомиться со следующей статьей проекта кода для более полного примера: http://www.codeproject.com/KB/locale/LocalizedScriptsAndStyles.aspx