【发布时间】:2011-10-06 16:55:15
【问题描述】:
我正在为网站上的“小部件”开发插件架构。我希望每个单独的小部件都将其 Javascript 和 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 渲染到样式块中的页面,但这并不理想。
标签: c# .net css web-services wcf