C#如何调用REST
2015-09-14 01:38
585 查看
这是一篇翻译文章,最近我很想知道REST是如何调用的,就上网查资料,发现这篇文章真的很不错。
英语原文地址
简介
REST这种web服务越来越流行。重要的是,作为一名开发人员,我们要知道如何与如洪水般冲击我们行业的架构所构建的服务进行沟通(这里也许应该是作为开发人员应该要了解REST服务吧)。在这篇文章里,我会给你们提供一个模块,这个模块调用REST服务,是C#语言实现的,同时,我也会给出使这些代码运行起来的细节。
解释REST服务是什么和它是如何工作的不是我们本文要讨论的范围。因此,如果你不熟悉基本概念,还是建议你先读(http://www.codeproject.com/Articles/21174/Everything-About-REST-Web-Services-What-and-How-Pa)这篇文章,而且可以加快速度。
背景
我要与你们分享的类(Class)是我开发的简化使用C # RESTful服务调用。多年来一直为我服务,并且在其他生产环节中使用。希望它可以节省你一些时间并增加一些有益东西。
使用代码
使用代码非常简单。你刚刚创建的RestClient 类的一个实例,分配你的端点(端点值是要调用REST 服务的URL),并调用MakeRequest方法。
基本调用
如果你想添加参数,你可以把它们传递到这样的要求的方法。如下所示:
设置HttpVerb (例如 GET, POST, PUT, or DELETE),只使用提供的HttpVerb 枚举。这是做一个POST请求的实例:
如果你想要的话,你也可以这样赋值:
完整代码
英语原文地址
简介
REST这种web服务越来越流行。重要的是,作为一名开发人员,我们要知道如何与如洪水般冲击我们行业的架构所构建的服务进行沟通(这里也许应该是作为开发人员应该要了解REST服务吧)。在这篇文章里,我会给你们提供一个模块,这个模块调用REST服务,是C#语言实现的,同时,我也会给出使这些代码运行起来的细节。
解释REST服务是什么和它是如何工作的不是我们本文要讨论的范围。因此,如果你不熟悉基本概念,还是建议你先读(http://www.codeproject.com/Articles/21174/Everything-About-REST-Web-Services-What-and-How-Pa)这篇文章,而且可以加快速度。
背景
我要与你们分享的类(Class)是我开发的简化使用C # RESTful服务调用。多年来一直为我服务,并且在其他生产环节中使用。希望它可以节省你一些时间并增加一些有益东西。
使用代码
使用代码非常简单。你刚刚创建的RestClient 类的一个实例,分配你的端点(端点值是要调用REST 服务的URL),并调用MakeRequest方法。
基本调用
string endPoint = @"http:\\myRestService.com\api\"; var client = new RestClient(endPoint); var json = client.MakeRequest();
如果你想添加参数,你可以把它们传递到这样的要求的方法。如下所示:
var json = client.MakeRequest("?param=0");
设置HttpVerb (例如 GET, POST, PUT, or DELETE),只使用提供的HttpVerb 枚举。这是做一个POST请求的实例:
var client = new RestClient(endpoint: endPoint, method: HttpVerb.POST, postData: "{'someValueToPost': 'The Value being Posted'}");
如果你想要的话,你也可以这样赋值:
var client = new RestClient(); client.EndPoint = @"http:\\myRestService.com\api\"; ; client.Method = HttpVerb.POST; client.PostData = "{postData: value}"; var json = client.MakeRequest();
完整代码
using System; using System.IO; using System.Net; using System.Text; public enum HttpVerb { GET, POST, PUT, DELETE } namespace HttpUtils { public class RestClient { public string EndPoint { get; set; } public HttpVerb Method { get; set; } public string ContentType { get; set; } public string PostData { get; set; } public RestClient() { EndPoint = ""; Method = HttpVerb.GET; ContentType = "text/xml"; PostData = ""; } public RestClient(string endpoint) { EndPoint = endpoint; Method = HttpVerb.GET; ContentType = "text/xml"; PostData = ""; } public RestClient(string endpoint, HttpVerb method) { EndPoint = endpoint; Method = method; ContentType = "text/xml"; PostData = ""; } public RestClient(string endpoint, HttpVerb method, string postData) { EndPoint = endpoint; Method = method; ContentType = "text/xml"; PostData = postData; } public string MakeRequest() { return MakeRequest(""); } public string MakeRequest(string parameters) { var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters); request.Method = Method.ToString(); request.ContentLength = 0; request.ContentType = ContentType; if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST) { var encoding = new UTF8Encoding(); var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData); request.ContentLength = bytes.Length; using (var writeStream = request.GetRequestStream()) { writeStream.Write(bytes, 0, bytes.Length); } } using (var response = (HttpWebResponse)request.GetResponse()) { var responseValue = string.Empty; if (response.StatusCode != HttpStatusCode.OK) { var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode); throw new ApplicationException(message); } // grab the response using (var responseStream = response.GetResponseStream()) { if (responseStream != null) using (var reader = new StreamReader(responseStream)) { responseValue = reader.ReadToEnd(); } } return responseValue; } } } // class }
相关文章推荐
- C#删除只读文件或文件夹(解决File.Delete无法删除文件)
- C#反射机制(转)
- 关于C#的静态类和静态构造函数
- C#实现所有经典排序算法
- c#配置文件的简单操作
- C#读写config配置文件
- 在制作水晶报表时遇到此错误未处理System.IO.FileNotFoundException HResult=-2147024894
- 读书心得20150913
- 巧用FileShare解决C#读写文件时文件正由另一进程使用的bug
- C#读取Word模板替换相应的字符串(标签)生成新的Word
- C#内存释放(垃圾回收)
- C#在Winform中改变Textbox高度三种方法
- c#开发安卓学习
- C#中DataGridView控件使用大全
- C# mvc中为Controller或Action添加定制特性实现登录验证
- C#跨线程调用
- C#~异步编程续~.net4.5主推的await&async应用(转)
- 说说C#的async和await(转)
- C#迭代语句
- C#—接口 PK 抽象类