我有一个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只是阅读论证而且就是这样......任何建议?
答案 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