WCF REST: указание типа контента в атрибуте WebGet не работает - PullRequest
5 голосов
/ 17 августа 2010

, возможно, я что-то не так делаю, но я возвращаю XML из моей службы WCF Rest, которая построена с VS 2010. В fiddler вы можете видеть, что она возвращает test / html в качестве типа содержимого

 HTTP/1.1 200 OK
 Cache-Control: private
 Content-Length: 222
 Content-Type: text/html; charset=utf-8
 Server: Microsoft-IIS/7.5
 X-AspNet-Version: 4.0.30319
 X-Powered-By: ASP.NET
 Date: Mon, 16 Aug 2010 20:49:55 GMT

Так что я пошел дальше и добавил следующее в атрибут webget в моем методе, но он все еще возвращает text / html ... Я предполагаю, что должен вернуть тип содержимого text / xml, потому что на самом деле я возвращаю XML?

Вот мой метод, я добавил ResponseFormat к атрибуту ... Я не был уверен, нужен ли мне bodystyle (я понятия не имею, что он делает, но видел это в примере :-))

    [WebGet(UriTemplate = "", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
    public List<SampleItem> GetCollection()
    {
        // TODO: Replace the current implementation to return a collection of SampleItem instances
        return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
    }

в любом случае после изменения и перестройки проекта он все равно возвращает неправильный тип контента ... я что-то пропустил?

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 222
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 16 Aug 2010 20:54:15 GMT

EDIT

Хорошо, у меня есть рабочее решение, но метод атрибута НЕТ ЭФФЕКТА, очень странно ... но если я поставлю это

  WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";

Теперь я проверяю fiddler, а тип содержимого на самом деле text / xml.

Но мне нужно поместить это в каждый метод, и метод атрибута, похоже, не имеет никакого эффекта.

Кто-нибудь знает почему?

Ответы [ 3 ]

5 голосов
/ 13 ноября 2011

Согласно this заголовки запроса Firefox имеют более высокий приоритет для text / html , чем text / xml , в результате чего методы службы WCF украшаются xml или JSON возвращается с «неправильным» ответом, хотя я могу представить, что это правильное поведение.

Тип содержимого ответа можно принудительно задать, явно указав

WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";

или эквивалент. Я полагаю, что это единственная альтернатива, если вы действительно хотите вызвать ответ определенного типа контента для всех браузеров / клиентов.

0 голосов
/ 07 ноября 2014

Старый пост, но вот что я нашел в блоге MSDN Начало работы со службами WCF WebHttp в .NET 4 :

Ваш проект должен использовать полную .NET 4 Framework, а не профиль клиента.

Как только я это сделал и перезапустил проект, я смог добавить System.ServiceModel.Web из списка литературы.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 17 августа 2010

См., Например,

WCF ResponseFormat For WebGet

Я думаю, вы хотите, например,

OutgoingWebResponseContext context = 
    WebOperationContext.Current.OutgoingResponse; 
context.ContentType = "image/jpeg"; 

ResponseFormat контролирует что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...