我有一个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只是在阅读论点,这就是it...Any的建议吗?
发布于 2009-06-17 21:08:35
不,我不认为你能在运行时以编程的方式做到这一点。当然,如果要从您的服务中公开两个不同的端点--一个返回,另一个返回JSON,然后以编程方式从客户端应用程序中选择调用哪个端点,那么可以做什么?
Marc
更新:正如Steve正确指出的那样,和之间的自动切换现在可以在WCF4.0中实现。WCF 4.0有一个改进的REST支持,它还包括基于HTTP接受报头的格式消息选择功能。
有关WCF4.0的新特性的更多信息,请参见:开发人员对WCF 4.0的介绍
发布于 2011-07-30 13:45:49
如果您的rest服务是自动配置的,则可以选择响应类型。
然后,在客户端请求时,只需添加所需的标头Accept: application/json
https://stackoverflow.com/questions/1008706
复制相似问题