Я работаю над подключаемой архитектурой для «виджетов» на веб-сайте. Я хотел бы, чтобы каждый отдельный виджет хранил его Javascript и CSS в качестве ресурсов в сборке. Когда страница отображается, я добавляю теги сценария, которые ссылаются на службу WCF, которая может проверять виджет, извлекать нужный файл и отправлять его обратно в браузер.Как я могу служить CSS-файлу из службы WCF?
Это отлично работает для файлов Javascript, но браузер не может обрабатывать файл CSS, проходящий через поток октетов. Обычно вы можете просто изменить тип содержимого ответа в HttpContext, но это недоступно в службе WCF.
Что мне нужно иметь браузер извлечь эти файлы через URL следующим образом:
<link type="text/css" rel="stylesheet" href="/Controllers/WidgetFileService.svc/style/WidgetId">
Я предпочел бы не реализовать пользовательские IHttpHandler, потому что, по моему опыту, это могут быть трудно развертывать, отлаживать и работать на разных машинах. Это мой первый проект в этой компании, и я бы предпочел не усложнять развертывание и тестирование.
Вот что у меня есть для интерфейса:
[ServiceContract]
public interface IWidgetFileService
{
[OperationContract]
[WebGet(UriTemplate = "style/{widgetID}", BodyStyle = WebMessageBodyStyle.Bare)]
System.IO.Stream GetStyleFile(String widgetID);
}
И реализация:
static private System.IO.Stream StreamBytes(byte[] data)
{
System.IO.Stream s = new System.IO.MemoryStream(data);
s.Position = 0;
return s;
}
public System.IO.Stream GetStyleFile(String widgetID)
{
IWidget w = GetWidget(widgetID);
return StreamBytes(w.GetEditorStyleFile());
}
Если я просматриваю к URL-адресу, данные поступают обратно, как и ожидалось. Кажется, что браузер обрабатывает запрос, который вызывает проблему.
Я полагаю, что я мог бы просто отобразить CSS непосредственно на странице в блоке стиля, но это не идеально. –