您的位置:首页 > 其它

不建议使用Restsharp

2019-04-20 17:52 2446 查看

Restsharp确实是个优秀的插件,它最大的特点是内置了JsonConverter, 在一定程度上简化了HttpWebRequest的使用,在nuget上面有19.3M的下载量,是个很好的证明。

但我认为它的致命缺陷就在于内置了JsonConverter, 在使用时无法将实体类与Http访问做解耦,因此很难封装成一个helper类。当然可以用泛型来解决这个问题。

第二个问题是,它内置的JsonConvert要求实体类有无参数的构造函数,而NewtonJson不用。

   实际上,我在实体类上加入了无参数的构造函数,但还是反序列化失败了:

    response2.Data返回null, response2.Content返回实体的Json

第三个问题,支持的.net Framework版本比较少

    我在4.0,4.5上nuget失败,在4.5.2nuget成功。

留下代码做个记录

public Person CheckPerson(WorkInfo workInfo, int page, int pageSize)
{
string baseUrl = "https://api.abc.com/api";
string url = "/Person";
url += page == 100 ? page.ToString() : pageSize + "/" + page;
//发送HTTPS请求
if (baseUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
HwApiHelper.SetCertificatePolicy();
}
var client = new RestClient(baseUrl);

var request = new RestRequest(url);
request.Timeout = 30000;

request.Method = Method.POST;
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + token.Access_token);
request.AddHeader("soapAction", "");
request.AddJsonBody(workInfo);//直接传输一个实体,无需如HttpWebRequest那样,先序列化,编码成byte[],再通过WriteSteam写
/*
//方式1:按指定的格式返回响应文本
IRestResponse response = client.Execute(request);
var content = response.Content;//按指定的格式返回响应文本,如json
*/
//方式2:用内置反序列化工具直接反序列化为实体,要求实体类有无参数的构造函数
IRestResponse<Person> response2 = client.Execute<Person>(request);
//已经增加了无参构造函数,却可能不成功

return response2.Data;
}

public class Person
{
public string Name { get; set; }
public DateTime BornDate { get; set; }
public string Gender { get; set; }
public Person()
{

}
}
public  class WorkInfo
{
public string Company { get; set; }
public string Title { get; set; }
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: