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 и использую существующий, если он найден.

Мне повезло, увидев это.

Другие вопросы по тегам