WCF WebInvoke ResponseFormat

时间:2009-06-17 18:12:17

标签: wcf rest responseformat

我有一个WCF restul服务,我想让用户选择他们想要的请求格式,我有装饰

    [OperationContract]
    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch}&format=xml")]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]

首先,有没有办法在运行时指定ResponseFormat并将格式作为方法的参数?从阅读中我不这么认为......好的接下来的事情 上面的代码是好的并且有效,但我有一个问题,我希望能够指定一个默认值,所以当没有格式争论传递然后我只是默认但如果我这样装饰

    [WebInvoke(Method = "GET", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        UriTemplate = "getstreamurl?ch={ch})]

    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "getstreamurl?ch={ch}&format=json")]

如果XML是默认值,如果我尝试通过浏览器调用服务方法,它会告诉我:

  

UriTemplateTable不支持具有与模板“getstreamurl?ch = {ch}”等效路径的多个模板,但具有不同的查询字符串,其中查询字符串不能通过文字值消除歧义。有关更多详细信息,请参阅UriTemplateTable的文档

他们显然可以区分,但似乎WCF只是阅读论证而且就是这样......任何建议?

2 个答案:

答案 0 :(得分:6)

不,我不认为您可以在运行时以编程方式执行此操作。当你从服务中公开两个不同的端点时,可以做什么 - 一个返回XML,另一个返回JSON,然后以编程方式从客户端应用程序中选择要调用的端点。

马克

正如Steve Michelotti正确指出的那样,

更新,现在可以在WCF 4.0中实现JSON和XML之间的自动切换。 WCF 4.0具有改进的REST支持,它还包括基于HTTP接受标头的格式消息选择功能。

有关WCF 4.0新功能的详细信息,请参阅:A Developer's Introduction to WCF 4.0

答案 1 :(得分:3)

如果您的休息服务已自动配置,您可以执行此操作选择响应类型。

然后在客户端请求上添加所需的头部接受:application / json