首页 > Python基础教程 >
-
C# RestSharp 使用
1.什么是RestSharp
RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的Http的组件。它具有以下优点:
支持.NET 3.5+,Silverlight 4, Windows Phone 7, Mono, MonoTouch, Mono for Android, Compact Framework 3.5等
通过NuGet方便引入到任何项目
可以自动反序列化XML和JSON
支持自定义的序列化与反序列化
自动检测返回的内容类型
支持HTTP的GET, POST, PUT, HEAD, OPTIONS, DELETE等操作
可以上传多文件
支持oAuth 1, oAuth 2, Basic, NTLM and Parameter-based Authenticators等授权验证等
支持异步操作
极易上手并应用到任何项目中
2. 如何使用nuget添加restsharp到工程:
3.项目中使用举例:
首先定义一个GetClient 方法:
//使用方法之前获得cookie并放入RestClient对象
public static RestClient GetClient(List<Cookie> cookies)
{
//RestClient传递的string型的url
var client = new RestClient(TestConfigurations.Domain.AppendPathSegments("app"));
client.CookieContainer = new System.Net.CookieContainer();
cookies.ForEach(c => client.CookieContainer.Add(new System.Net.Cookie(c.Name, c.Value, c.Path, c.Domain)));
return client;
}
//封装了一个方法来给restClient调用
public static IRestResponse SendRequest(this RestClient client, Uri requestUrl, Method method, Dictionary<string, string> parameters = null)
{
var request = client.FirmRequest(method);
client.BaseUrl = requestUrl;
if (parameters != null)
{
foreach (var p in parameters)
{
request.AddParameter(p.Key, p.Value);
}
}
//调用Execute方法来执行request
return client.Execute(request);
}
如果出现网络错误, RestResponse.ResponseStatus 会设置 ResponseStatus.Error, 反之则是ResponseStatus.Completed.
如果需要访问 HTTP status code, 可以在 RestResponse.StatusCode 中找到。
//封装了一个方法来生成request对象,并且赋予header的必要信息以及传递get/post方式
public static RestRequest FirmRequest(this RestClient client, Method method)
{
var request = new RestRequest();
request.Method = method;
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
return request;
}
下面是调用方法的例子:
//把cookies传入client
var client = HttpClientUtils.GetClient(Cookies);
//生成需要使用的参数,add到request内
var parameters = GetPage<AddUserPage>().EditUserForm.GetSubmitParameters();
parameters["BillableHourTarget"] = target;
//调用方法
client.SendRequest(new Uri(I.GetUrl()), Method.POST, parameters);
也可以使用反序列化,生成JObject(把一个json对象反序列化为.net object
var jresult = (JObject)JsonConvert.DeserializeObject(result.Content);
if (jresult["Success"].ToString().ToLower() == "true")
//do something here
4.RestSharp反序列化
application/json - JsonDeserializer
application/xml - XmlDeserializer
text/json - JsonDeserializer
text/xml - XmlDeserializer
5. 其他用法:
从IRestResponse中获取内容:
var client = HttpClientUtils.GetClient(cookies);
result = client.SendRequest(new Uri(url), RestSharp.Method.GET).Content;
使用JsonConvert反序列化
var jtokenBudget = (JToken)JsonConvert.DeserializeObject(client.SendRequest(calendarUrl, g