c# – 创建发布urlformatted请求的WCF REST客户端的任何轻松方法?

这是
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/94503037-9cc4-494d-88af-4e97fcb9cdcc的副本,但我没有太多成功在那里获得富有成效的答案. 🙁

我一直试图找到有关从ChannelFactory获得一个漂亮的具体REST服务客户端(代理)的信息.

据我所知,你可以在客户端界面上设置attirubtes,告诉WCF使用XML(DataContract或XmlSerialization)或JSON作为响应,以及URL格式的HTTP get请求或HTTP / JSON的HTTP帖子. [从原始编辑]当然,以编程方式或通过配置提供不同的绑定配置. [/原创编辑]

我想要的是在服务接口上放置一些属性,告诉WCF创建一个URL格式的POST,没有XML头,然后用XML获取响应. (例如)
[原创]和/或提供BCL绑定支持[原创] / [编辑]

一个梦想的场景是这样的:

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 contrib库,WCF样本等.人.是太学术化,有太多的管道和/或太少的直观文档,我没有痛苦这样做. 🙂

有什么提示,我可以找到最简单的方法来做到这一点?

(请不要告诉我使用HttpRequest或WebClient,这就是为什么我们有ChannelFactory !;))

[更新]

如果我错了,请纠正我,但据我所知,很多所谓的REST API需要URL格式的请求,而不是Json或Xml.

基于Web的服务接口的WCF解释反映了方法定义上的WebGet和WebInvoke属性,以确定如何在“服务”上调用每个“方法”. (为简单起见,我称之为方法和服务)

WebInvoke属性采用WebRequestFormat枚举值来确定如何序列化请求.该枚举只有Json和Xml.

对我来说似乎真的很傻,这是一个枚举,而不是指向格式化程序/序列化工厂的指针,甚至是具体的说法.

因此,问题实际上归结为最简单的,最好已经实现的,覆盖了请求的序列化.

[/更新]

最佳答案 REST没有元数据标准.因此,您必须使用BCL中的许多客户端REST工具包或基本HTTP API之一自行滚动客户端代码.您可以使用WebChannelFactory来定义与WebInvoke,WebGet的交互,但您必须自己编写或者获取服务的副本.

通常在REST API中,API应根据URI动态发现,因为资源还应返回适用于交互当前状态或资源的相关URI和动词.

点赞