REST Stream的OutgoingResponse.ContentType被忽略,总是在接收浏览器上显示"application/xml"



我有一个自托管的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 = truefalse以防万一,因为它出现在谷歌搜索中,但这对这没有影响。

我发现有足够多的文章显示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,如果找到,则使用现有的。

我很幸运看到了那个。

相关内容

  • 没有找到相关文章

最新更新