这是 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/94503037-9cc4-494d-88af-4e97fcb9cdcc 的副本,但我在那里获得富有成效的答案并没有取得多大成功。 :(
我一直在努力寻找有关从 ChannelFactory 获得一个不错的具体 REST 服务客户端(代理)的信息。
据我所知,您可以在客户端界面上设置属性,告诉 WCF 使用 XML(DataContract 或 XmlSerialization)或 JSON 进行响应,以及 URL 格式的 HTTP get 请求或 XML/JSON 的 HTTP post。 [从原始编辑]当然,以编程方式或通过配置提供不同的绑定(bind)配置。 [/从原文编辑]
我想要的是在服务接口(interface)上放置一些属性,告诉 WCF 创建一个 URL 格式的 POST,没有 XML header ,然后获得 XML 格式的响应。 (例如) [从原始编辑] 和/或提供支持以下内容的 BCL 绑定(bind) [/从原始编辑]
理想的场景是这样的:
public interface IRestClient
{
[WebInvoke]
AuthResponse Authorize(
[HeaderParameter]
string someHeader,
string someData,
int someInt)
}
// ...
var client = channelFactory.CreateChannel<IRestClient>(); // whatever bindings I'd need for this
var response = client.Authorize("abc", "def", 123);
并让 client.Authorize 实际执行
HTTP POST /authorize
someHeader: abc
someData=def&someInt=123
反序列化
<AuthResponse>
<Message>Hi there!</Message>
</AuthResponse>
据我从谷歌搜索和论坛上的讨论中发现,除非你做大量的管道工作,编写拦截器、格式化程序和天知道什么,否则没有办法做到这一点。
WCF 贡献库、WCF 示例等。阿尔。太学术了,有太多的管道和/或太少的直观文档,我无法毫不费力地做到这一点。 :)
关于在哪里可以找到执行此操作的最简单方法的任何提示?
(请不要告诉我使用 HttpRequest
或 WebClient
,这就是为什么我们有 ChannelFactory
!;))
[更新]
如果我错了请纠正我,但据我所知,许多所谓的 REST API 需要 URL 格式的请求,而不是 Json 或 Xml。
基于 Web 的服务接口(interface)的 WCF 解释反射(reflect)了方法定义上的 WebGet
和 WebInvoke
属性,以确定如何调用“服务”上的每个“方法”。 (为简单起见,我将其称为方法和服务)
WebInvoke
属性采用 WebRequestFormat
枚举值来确定如何序列化请求。该枚举只有 Json 和 Xml。
我觉得这是一个枚举,而不是指向格式化程序/序列化程序工厂的指针,甚至不是具体的 said,这对我来说真的很愚蠢。
所以,这个问题真的归结为最简单的,最好是已经实现的,覆盖请求的序列化。
[/update]
最佳答案
REST 没有元数据标准。因此,您将不得不使用众多客户端 REST 工具包之一或 BCL 中的基本 HTTP API 自己滚动客户端代码。您可以使用 WebChannelFactory 定义与 WebInvoke、WebGet 的接口(interface),但您必须自己编写或获取服务的副本。
通常在 REST API 中,API 应该根据 URI 动态发现,因为资源还应该返回适用于您的交互或资源的当前状态的相关 URI 和动词
关于c# - 有什么轻松的方法可以创建发布 url 格式请求的 WCF REST 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363869/