使用WCF使用RESTful JSON API

我是WCF的新手(并且在.NET中一般都很生疏)所以有一个明显的机会这是一个已回答的问题而我错过了它。

我正在构建一个ASP.NET MVC应用程序,它将为其后端使用基于RESTful JSON的API。 我一直在研究如何在.NET中使用这种API的不同选项,看起来WCF是迄今为止最受欢迎的选择。 稍微阅读WCF我现在有一个基本的消费者类来发出请求,这是一个开始。

但现在我需要做更多的事情,而且我没有取得多大进展。 我需要使用JSON正文向API发送POST。 这是我到目前为止所拥有的:

using System.ServiceModel; using System.ServiceModel.Web; using System.Runtime.Serialization; namespace APIConsumer { [ServiceContract] public interface IAPIClient { [OperationContract] [WebInvoke( Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/session/login.json" )] string SessionLogin(string login_name); } public class APIClient : ClientBase, IAPIClient { public string SessionLogin(string login_name) { return this.Channel.SessionLogin(login_name); } } } 

我无法弄清楚的是传递a)POST主体内的任何数据和正确的序列化.NET对象作为POST主体中的JSON的正确方法。 有一个很好的例子说明如何在那里工作吗?

如果您想知道如何将POST的JSON主体格式化为操作SessionLogin,在您的情况下,它将非常简单。 JSON数据只是:

 {"login_name": "someuser"} 

WCF框架将处理将数据映射到您的操作,并将值“someuser”传递给参数login_name。 这是您需要的,还是需要帮助的更复杂的场景?

请参阅 MSDN上的如何:序列化和反序列化JSON数据文章。 您还需要确保在请求中将内容类型设置为客户端的“application / json”。 看看这个问题 。

我遇到了同样的问题。 有时POST JING有效,但并非总是如此。 这是不可靠的,它失败的原因可能是神秘的。 我最终发现POST的工作量超过了它的价值,而且你可以用GET完成同样的工作。 如果您不必使用POST设计服务,我有一个工作示例,说明如何使用GET完成POST尝试:

http://winsockwebsocket.codeplex.com/

(这是一个看似无关的项目的一部分,但只需转到Northwind.Web文件夹即可查看从jQuery发送/接收JSON到WCF的完整工作示例。)