OutgoingResponse.ContentType потока REST игнорируется, всегда показывает "application/xml" при получении браузера
У меня есть собственный WCF REST/webHttpBinding
служба, привязанная к конечной точке. У меня есть несколько потоков разных типов контента, которые он обслуживает. Сам контент доставляется корректно, но любой OutgoingResponse.ContentType
настройка, кажется, игнорируется и вместо этого доставляется как "application/xml"
каждый раз.
Браузеры, кажется, справляются с этим для javascript и html (в зависимости от того, как он будет использоваться), но не для файлов css, которые интерпретируются более строго. CSS-файлы - это то, как я понял проблему, но это проблема для всех потоков. Инструменты разработчика Chromebug и IE оба показывают "application/xml"
независимо от того, что я вставил в обслуживающий код для типа контента. Я также попытался установить заголовок типа контента как Header
в OutgoingResponse
но это не имеет значения, и это, вероятно, просто долгий способ сделать то, что 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
на всякий случай, потому что он появился в поиске Google по этому вопросу, но это не влияет на это.
Я нахожу достаточно статей, которые показывают, что Stream и ContentType работают вместе, чтобы запутать меня, почему это не работает. Я считаю, что Stream
предназначен только для тела ответа, а не для всего конверта.
Мой.svclog не показывает ничего интересного / значимого, что я узнаю.
============
Я могу подтвердить в Fiddler2, что заголовки доставляются, как показано в браузере.
...
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
...
1 ответ
Решено!
У меня было что-то вроде следующего в MessageInspector:
HttpResponseMessageProperty responseProperty = new HttpResponseMessageProperty (); responseProperty.Headers.Add ("Access-Control-Allow-Origin", "*"); reply.Properties ["httpResponse"] = responseProperty;
и это перезаписывало уже существующий HttpResponseMessageProperty в reply.Properties, включая любые настройки contentType. Вместо этого я сначала пытаюсь получить HttpResponseMessageProperty и использую существующий, если он найден.
Мне повезло, увидев это.