RestSharp简单扩展
using RestSharp; using RestSharp.Deserializers; using RestSharp.Serializers; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Web; namespace RestSharp.Extension { public class RestAPIClient { private RestClient _client; public RestClient Client { get { return _client; } } public RestAPIClient(string baseUri) { this._client = new RestClient(baseUri); //使用CookieContainer自动管理cookie this._client.CookieContainer = new System.Net.CookieContainer(); } /// <summary> /// 发送一个HTTP请求 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="resource">资源地址</param> /// <param name="method">请求方式</param> /// <param name="body">请求参数</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns>返回T对象</returns> /// <remarks>当Method为Get的时候,body只能是简单的匿名对象,即匿名对象中不能在包含匿名对象</remarks> public T Execute<T>(string resource, Method method, object body = null, Action<IRestRequest> setRequestParam = null) where T : new() { return ExecuteRaw<T>(resource, method, body, setRequestParam).Data; } /// <summary> /// 发送一个HTTP请求 /// </summary> /// <param name="resource">资源地址</param> /// <param name="method">请求方式</param> /// <param name="body">请求参数</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns>返回一个包括所有服务器响应信息的原始对象</returns> public IRestResponse ExecuteRaw(string resource, Method method, object body = null, Action<IRestRequest> setRequestParam = null) { var request = BuildRequest(resource, method, body, setRequestParam); return _client.Execute(request); } /// <summary> /// 发送一个异步HTTP请求 /// </summary> /// <param name="resource">资源地址</param> /// <param name="callback">异步回调函数</param> /// <param name="method">请求方式</param> /// <param name="body">请求参数</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns></returns> public RestRequestAsyncHandle ExecuteRawAsync(string resource, Action<IRestResponse> callback, Method method, object body = null, Action<IRestRequest> setRequestParam = null) { var request = BuildRequest(resource, method, body, setRequestParam); return _client.ExecuteAsync(request, callback); } /// <summary> /// 发送一个HTTP请求 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="resource">资源地址</param> /// <param name="method">请求方式</param> /// <param name="body">请求参数</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns>返回一个包括所有服务器响应信息的原始对象及反序列化的T对象Data</returns> public IRestResponse<T> ExecuteRaw<T>(string resource, Method method, object body = null, Action<IRestRequest> setRequestParam = null) where T : new() { var request = BuildRequest(resource, method, body, setRequestParam); return _client.Execute<T>(request); } /// <summary> /// 发送一个异步HTTP请求 /// </summary> /// <param name="resource">资源地址</param> /// <param name="callback">回调函数</param> /// <param name="method">请求方式</param> /// <param name="body">请求参数</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns></returns> public RestRequestAsyncHandle ExecuteRawAsync<T>(string resource, Action<IRestResponse<T>> callback, Method method, object body = null, Action<IRestRequest> setRequestParam = null) where T : new() { var request = BuildRequest(resource, method, body, setRequestParam); return _client.ExecuteAsync<T>(request, callback); } /// <summary> /// 组装请求 /// </summary> /// <param name="resource">请求URL</param> /// <param name="method">请求类型</param> /// <param name="body">请求体</param> /// <param name="setRequest">设置请求参数委托</param> /// <returns></returns> private RestRequest BuildRequest(string resource, Method method, object body = null, Action<IRestRequest> setRequestParam = null) { if (string.IsNullOrWhiteSpace(resource)) { throw new ArgumentNullException("resource", "请求资源url不能为空。"); } var request = new RestRequest(method) { Resource = resource, RequestFormat = DataFormat.Json, DateFormat = "yyyy-MM-dd HH:mm:ss", //JsonSerializer = new RestJsonSerializer("application/json") }; //默认传递数据格式及响应格式都为json request.AddHeader("Content-Type", "application/json"); request.AddHeader("Accept", "application/json"); //添加请求体 if (body != null && new Method[] { Method.PUT, Method.POST }.Contains(method)) { //该方法只能用于POST或PUT请求 request.AddBody(body); } else { //Get或其他请求,body只能是一个简单匿名对象 request.AddObject(body); } //执行设置请求参数委托 if (setRequestParam != null) { setRequestParam.Invoke(request); } return request; } } }
RestSharp简单扩展的更多相关文章
- 对bootstrap modal的简单扩展封装
对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677 注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...
- Log4net创建日志及简单扩展
转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...
- 使用Log4net创建日志及简单扩展
如何使用Log4net创建日志及简单扩展 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的 ...
- 由一道面试题简单扩展 — setTimeout、闭包
在一个前端公众号,看到这么一个号称简单的面试题: 1.以下程序输出什么? <script type="text/javascript"> function init() ...
- asp.net mvc Htmlhelper简单扩展
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- C# AutoMapper的简单扩展
AutoMapper可以很方便的将一个实体的属性值转化给另一个对象.这个功能在我们日常的编码中经常会遇到.我将AutoMapper的一些基本映射功能做成扩展方法,在编码中更方便使用. using Sy ...
- Enum的简单扩展
1 添加一个描述的Attribute public enum MessageResult { [System.ComponentModel.Description("未通过")] ...
- 数据类型 简单扩展(Java)
public class HelloWorld { public static void main(String[] args) { //整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x i ...
- 如何使用Log4net创建日志及简单扩展
第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0.第二步:程序启动时读取log4net的配置文件.如果是CS程序,在根目录的Program.cs中的Main方法中添加 ...
随机推荐
- excel 把字符和数字分开
主要是 len,lenb,left,right 函数 http://jingyan.baidu.com/article/95c9d20dac8540ec4f75616d.html
- java:关于文件下载
开发中遇到的问题 一. 场景描述:用户先指定下载路径,服务器将资源文件下载到指定的路径. 首先:该系统采用的是B/S架构,即浏览器.服务器(.数据库). 单纯通过B/S架构,就想要在服务器中去操 ...
- web之css伪类
利用伪类清楚浮动: 代码: <!DOCTYPE html> <htmllang="en"> <head> <metacharset=&qu ...
- CSS预处理器Sass、LESS 和 Stylus
CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...
- X-Frame-Options 响应头
[X-Frame-Options 响应头] 参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
- IE6 7下常见CSS兼容性处理
以下是一些比较常见的IE6 7下的兼容性问题. 在当下这个时代,其实我们几乎可以不用再去针对IE6做兼容性的处理,除非你的公司还是诡异的要求你兼容到IE6.但是了解一些常见的兼容性问题还是可以帮助我们 ...
- sscanf与正则表达式(转)
今天翻google reader的时候看到这样一篇文章,介绍的是sscanf的高级用法.直到今天我才知道sscanf是可以直接用正则表达式的,惭愧. 在msdn中sscanf的声明如下 int ssc ...
- laravel(二):laravel基本入门 看到Hello Laravel
1.Hello World 首先,我们来添加一些文字,在页面中显示.为了能访问网页,要启动程序服务器. $ php artisan serve 上述命令会启动 PHP 内建的开发服务器,要查看程序,请 ...
- hdu 3307 Description has only two Sentences (欧拉函数+快速幂)
Description has only two SentencesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- .net WebClient发送请求实例:
public static Main(string [] ager) { WebClient client = new WebClient(); client.Headers.Clear(); cli ...