WCF WebInvoke ResponseFormat(WCF WebInvoke Respons

2019-06-23 12:34发布

我有一个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并采取格式作为参数传递给方法的方法是什么? 从阅读围绕我不这么认为......好接下来的事情,上面的代码是确定和工作原理,但有一个问题,IM,我希望能够指定一个默认的,所以当没有格式arguement传递然后我就默认值,但我装点像这样

    [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 = {}章”,但有不同的查询字符串,其中查询字符串不能全部通过文字值消歧多个模板。 见UriTemplateTable的文档详细

他们显然可以区分但似乎WCF只阅读了参数,并且那是它...有什么建议?

Answer 1:

不,我不认为你可以在运行时做编程。 你可以做,当然如果暴露从服务两个不同的终点-一个返回XML,另一个返回JSON,然后以编程方式挑选您的客户端应用程序调用哪一个。

更新:史蒂夫·米凯洛蒂正确地指出,这JSON和XML之间的自动切换,现在可以在WCF 4.0实现。 WCF 4.0具有改进的REST支持其中还包括一个格式信息选择的特征,基于HTTP接受头。

有关WCF 4.0的新功能的详细信息,请参阅: 开发人员的介绍WCF 4.0



Answer 2:

如果你的休息服务配置自动选择响应类型你可以做到这一点。

然后在客户机请求简单地添加所需的头接受:应用/ JSON



文章来源: WCF WebInvoke ResponseFormat