使用WCF使用RESTful JSON API

时间:2009-08-06 23:10:42

标签: c# .net wcf json rest

我是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>, IAPIClient {
        public string SessionLogin(string login_name) {
            return this.Channel.SessionLogin(login_name);
        }
    }
}

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

3 个答案:

答案 0 :(得分:2)

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

{"login_name": "someuser"}

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

答案 1 :(得分:1)

查看有关MSDN的How to: Serialize and Deserialize JSON Data文章。您还需要确保在请求中将内容类型设置为客户端的“application / json”。看看这个SO question

答案 2 :(得分:0)

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

http://winsockwebsocket.codeplex.com/

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