我有一个自托管的 WCF REST/ webHttpBinding
-endpoint-bound 服务。我有几个不同内容类型的流服务。内容本身已正确交付,但任何OutgoingResponse.ContentType
设置似乎都被忽略了,而是像"application/xml"
每次一样交付。
对于 javascript 和 html(取决于它的使用方式),浏览器似乎可以克服它,但对于解释更严格的 css 文件却没有。CSS 文件是我意识到问题的方式,但它是所有 Streams 的问题。Chromebug 和 IE 开发人员工具都会显示"application/xml"
,无论我在内容类型的服务代码中添加了什么内容。我也尝试将内容类型标头设置为Header
inOutgoingResponse
但这没有什么区别,而且它可能只是做 OutgoingResponse.ContentType 已经做的很长的路要走。
[OperationBehavior]
System.IO.Stream IContentChannel.Code_js()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/javascript;charset=utf-8";
var ms = new System.IO.MemoryStream();
using (var sw = new System.IO.StreamWriter(ms, Encoding.UTF8, 512, true))
{
sw.Write(Resources.code_js);
sw.Flush();
}
ms.Position = 0;
return ms;
}
添加了此行为:
var whb = new WebHttpBehavior
{
DefaultBodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.WrappedRequest,
DefaultOutgoingRequestFormat = System.ServiceModel.Web.WebMessageFormat.Json,
DefaultOutgoingResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json,
HelpEnabled = false
};
我试过设置AutomaticFormatSelectionEnabled = true
,false
以防万一,因为它出现在谷歌搜索中,但这对此没有影响。
我找到了足够多的文章来展示 Stream 和 ContentType 一起工作,这让我很困惑,为什么这不起作用。我相信这Stream
只是响应的主体,而不是整个信封。
我的 .svclog 没有显示任何我认识的有趣/相关的内容。
=============
我可以在 Fiddler2 中确认标题正在按浏览器中显示的方式传递。
...
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
...