(1)一般调用:

public static List<T> Execute<T>(string resourceUrl, object obj, out int totalNum)
{
var client = new RestClient(baseUrl);
var request = new RestRequest(resourceUrl, Method.POST); Type t = obj.GetType();
foreach (PropertyInfo pi in t.GetProperties())
{
string Name = pi.Name;
string Value = string.Empty;
if (pi.GetValue(obj, null) != null)
{
Value = pi.GetValue(obj, null).ToString();
}
request.AddQueryParameter(Name, Value);
}
IRestResponse response = client.Execute(request); return RosolveResponse<T>(response, out totalNum);
}

(2)传json参数(这里用到了Newtonsoft.Json):

public static List<T> ExecuteJson<T>(string resourceUrl, object obj, out int totalNum)
{
var client = new RestClient(baseUrl);
var request = new RestRequest(resourceUrl, Method.POST); string jsonToSend = JsonConvert.SerializeObject(obj); request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json; IRestResponse response = client.Execute(request); return RosolveResponse<T>(response, out totalNum);

这一段用HttpWebRequest实现是这样的:

        public static List<T> ExecuteJson<T>(string resourceUrl, object obj, out int totalNum)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseUrl + resourceUrl);
request.Method = "post";
request.ContentType = "application/json;charset=UTF-8"; var stream = request.GetRequestStream();
using (var writer = new StreamWriter(stream))
{
writer.Write(JsonConvert.SerializeObject(obj));
writer.Flush();
} HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch
{
totalNum = ;
return new List<T>();
} StreamReader responseReader = null;
string responseData = ""; try
{
responseReader = new StreamReader(response.GetResponseStream());
responseData = responseReader.ReadToEnd(); RestResult ret = JsonConvert.DeserializeObject<RestResult>(responseData);
JContainer resData; if (ret.Code == )
{
resData = ret.ResData; totalNum = ret.ResData.Value<int>("totalNum");
JContainer dataResult = ret.ResData.Value<JContainer>("dataResult"); return dataResult.ToList<T>();
}
totalNum = ;
return new List<T>();
}
catch
{
totalNum = ;
return new List<T>();
}
finally
{
response.GetResponseStream().Close();
responseReader.Close();
responseReader = null;
}
}

附:RosolveResponse函数(这里用到了Newtonsoft.Json):

private static List<T> RosolveResponse<T>(IRestResponse response, out int totalNum)
{
if (response.StatusCode == HttpStatusCode.OK)
{
RestResult ret = JsonConvert.DeserializeObject<RestResult>(response.Content);
JContainer resData; if (ret.Code == )
{
resData = ret.ResData; totalNum = ret.ResData.Value<int>("totalNum"); //取值
JContainer dataResult = ret.ResData.Value<JContainer>("dataResult"); //取值 return dataResult.ToList<T>();
}
}
totalNum = ;
return new List<T>(); }

RestSharp使用备忘的更多相关文章

  1. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  2. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  3. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  4. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  5. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  6. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  7. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  8. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  9. 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因

    近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...

随机推荐

  1. 3DMAX可编辑多边形常用命令-桥

    桥命令可以连接连个面 下图两个cube(可编辑多边形)已经被附加到一起,选中相对的两个面,点击桥 结果

  2. luogu 1169 棋盘制作(单调栈/悬线)

    luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...

  3. js中的原型以及原型链

    在js中原型是每个构造函数的属性: 这个算 js 核心概念的一部分 var f1 = new Foo(); 对象 f1 的构造函数就是 Foo , f1的原型 __proto__ 就指向构造函数 Fo ...

  4. mysql联合查询(UNION)

    SECLET USER_NAME FROM USERS UNION [ALL] SECLET GNAME FROM SCORES 可以把多条查询语句所产生的结果纵向连接为一体 ALL关键字可以显示全部 ...

  5. The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)(转)

    Microsoft SQL Server 5030错误解决办法 今天在使用SQL Server时,由于之前创建数据库忘记了设置Collocation,数据库中插入中文字符都是乱码,于是到DataBas ...

  6. Opencv级联分类器实现人脸识别

    在本章中,我们将学习如何使用OpenCV使用系统相机捕获帧.org.opencv.videoio包的VideoCapture类包含使用相机捕获视频的类和方法.让我们一步一步学习如何捕捉帧 - 第1步: ...

  7. 6.计算字段 ---SQL

    提示:客户端与服务器的格式在SQL语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成.但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多. 一.拼接字段 拼接(conca ...

  8. [LOJ 2022]「AHOI / HNOI2017」队长快跑

    [LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...

  9. css中如何设置透明度

    怎样在CSS样式中设置背景的透明度,下面一个具体的实例.把类为box的层设为透明.<div class="box"></div><style>. ...

  10. 关系型数据库---MySQL---数据库设计三大范式

    1.第一范式: 1.1.1 数据表的每个数据列具有原子性: 1.1.2 同一个数据表中内容相似的数据列必须消除: 2.第二范式: 第一范式的基础上,每个数据表只描述一件事: 3.第三范式: 第二范式的 ...