如何为WCF ServiceContract设置默认的RequestFormat?

时间:2012-08-02 21:46:21

标签: c# json wcf webhttpbinding

我正在编写一个有很多方法的Web服务。它们都设置类似于以下内容:

[OperationContract]
    [WebInvoke(
        BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "x/y/z")]
    void someMethod(int x, int y, int z);

我想要做的只是在web.config文件中设置默认的BodyStyle / RequestFormat / ResponseFormat。现在,我知道我可以这样做:

  <endpointBehaviors>
    <behavior name="webHttpBehavior">
      <webHttp defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json" />
    </behavior>
  </endpointBehaviors>

但似乎没有RequestFormat的属性。如何将默认RequestFormat设置为JSON?

2 个答案:

答案 0 :(得分:5)

请求类型为automatically interpreted by WCF,您无需为服务操作指定默认RequestFormat

如果您尝试强制使用支持的请求格式,请参阅this related SO post on enforcing request content types

注意:RequestFormat操作分配WebGet没有意义。根据定义,WebGet不能包含JSON格式存在的Body。这里有一个更好的例子是WebInvoke

答案 1 :(得分:1)

web.config文件

中的 webHttp 元素中将automaticFormatSelectionEnabled属性设置为 true
<behaviors>
   <endpointBehaviors>
      <behavior>
         <webHttp automaticFormatSelectionEnabled="true" />
      </behavior>
   </endpointBehaviors>
</behaviors>


例如:您可以在接收结束时设置Accept:application/json并获得JSON结果。

邮递员屏幕

Json response

=============================================== =====================

Xml response


https://msdn.microsoft.com/en-us/library/ee476510(v=vs.110).aspx