我有一个自托管的WCF REST/webHttpBinding
-端点绑定服务。我有一些不同内容类型的流,它提供服务。内容本身是正确传递的,但任何OutgoingResponse.ContentType
设置似乎都会被忽略,而每次都以"application/xml"
的形式传递。
对于javascript和html(取决于它的使用方式),浏览器似乎已经克服了,但对于解释更严格的css文件则不然。CSS文件是我意识到这个问题的方式,但这对所有Streams来说都是个问题。Chromebug和IE开发工具都显示"application/xml"
,而不管我在内容类型的服务代码中放了什么。我也尝试过在OutgoingResponse
中将内容类型标头设置为Header
,但这没有什么区别,而且可能只是做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
...
已解决!
我在MessageInspector中有如下内容:
HttpResponseMessageProperty responseProperty=新的HttpResponse MessageProperty();responseProperty.Headers.Add("Access Control Allow Origin","*");回复Properties["httpResponse"]=responseProperty;
并且这覆盖了应答中已经存在的HttpResponseMessageProperty。属性,包括任何contentType设置。相反,我首先尝试获取HttpResponseMessageProperty,如果找到,则使用现有的。
我很幸运看到了那个。