C#REST客户端示例?

时间:2011-09-29 14:20:40

标签: c# wcf rest client

我一直在寻找,似乎没有任何效果。

我正在尝试连接到我的REST(WCF)服务。它使用以下内容在firefox中正常工作:

http://localhost:1337/WCF.IService.svc/rest/Services?CostCentreNo=1&Filter=1

其中rest是端点地址; Services?CostCentreNo=1&Filter=1是带有参数的模板

以下是服务器合同点。

    [OperationContract]
    [WebGet(UriTemplate = "/Services?CostCentreNo={CostCentreNo}&Filter={Filter}")]
    List<Services> GetServices(Int32 CostCentreNo, Int32 Filter);

我是否可以通过c#..

获得一个连接到此的实例

3 个答案:

答案 0 :(得分:4)

通过扩展System.ServiceModel.ClientBase<IYourServiceContract>来创建自己的代理。 REST服务上的每个方法都通过Channel属性公开,因此您可以将它们包装起来。

[ServiceContract]
public interface IMyServiceContract
{
    [OperationContract]
    [WebGet(UriTemplate = "/ping")]
    string Ping();
}

public class ProxyClient : ClientBase<IMyServiceContract>, IMyServiceContract
{
    #region Implementation of IMyServiceContract

    public string Ping()
    {
        return Channel.Ping();
    }

    #endregion
}

public class Test
{
    // This assumes you have setup a client endpoint in your .config file
    // that is bound to IMyServiceContract.
    var client = new Client();

    System.Console("Ping replied: " + client.Ping());
}

不幸的是,这是针对WCF消费的,并不能与REST完美配合,即它不公开HTTP头,这是RESTful实现所必需的。

答案 1 :(得分:2)

尝试使用JSON:

String resonse = String.Empty;
HttpClient client = new HttpClient();

using (HttpResponseMessage httpResponse = client.Get("your_uri"))
{
   response = httpResponse.Content.ReadAsString();
}

此代码需要WCF Rest Toolkit中的Microsoft.HttpMicrosoft.Http.Extensions dll - http://aspnet.codeplex.com/releases/view/24644

答案 2 :(得分:0)

对于带有示例源的通用/动态解决方案,请参阅http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx