Как вернуть динамический CSS с помощью ASP.NET MVC?
Мне нужно решение, которое позволяет мне выполнить следующее:
- Возвращаемый CSS, динамически генерируемый методом действия
- Выбор файла CSS в зависимости от параметра запроса или файла cookie
- Использование инструмента для объединения и сжатия (минимизации) CSS
В настоящее время я рассматриваю, почему в ASP.NET MVC нет CssResult, и может ли быть причина его отсутствия. Создает ли пользовательский ActionResult не лучший способ сделать это? Есть ли другой способ, который я упустил, чтобы делать то, что мне нужно?
Любые другие предложения или подсказки, которые могут иметь значение, прежде чем я приступлю к этой задаче, также будут оценены:)
Ответы
Ответ 1
Вам нужно вернуть FileResult
или ContentResult
с типом контента text/css
.
Например:
return Content(cssText, "text/css");
return File(cssStream, "text/css");
EDIT. Вы можете создать вспомогательный метод Css
в вашем контроллере:
protected ContentResult Css(string cssText) { return Content(cssText, "text/css"); }
protected FileResult Css(Stream cssStream) { return File(cssStream, "text/css"); }
Ответ 2
Не нужно создавать собственный тип ActionResult. Так как CSS "просто текст", вы должны быть в порядке, используя ContentResult
. Предполагая, что вы унаследовали класс Controller
, просто выполните:
return Content(cssData, "text/css");
Ответ 3
В настоящее время я рассматриваю, почему в ASP.NET MVC нет CssResult, и может ли быть причина его отсутствия.
Просто потому, что у команды были свои руки полностью и, очевидно, было несколько попыток добавить ActionResults для всех случаев в жизни.
Создает ли пользовательский ActionResult не лучший способ сделать это?
Это был бы правильный способ сделать это. Я добавил RssActionResult и AtomActionResult для своих нужд. Также разумно добавлять больше типов, для документов, PDF файлов, изображений и т.д.
Возврат CSS, динамически генерируемый методом действия
Также имейте в виду, что браузер обычно кэширует css, если не видит некоторые изменения в URL-адресе. Добавление всегда добавляемого параметра является обычным решением.
<link rel="stylesheet" href="#" onclick="location.href='http://site.com/styles.css?v=26'; return false;">
Возможно, будет работать и дополнительный параметр маршрута для версии.