永发信息网

从调用API接口 看.net framework和 net core的异同

答案:1  悬赏:30  手机版
解决时间 2021-11-15 14:01
从调用API接口 看.net framework和 net core的异同
最佳答案
由于.net core是跨平台使用的,所有微软重写好多API,由此有些差异也是正常的。
现在就来看下请求API的差别吧。
首先,原本的.net framework请求方法:
复制代码
public static T HttpPostWithDecompression(string request, string url, int timeout) where T : new()
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Proxy = null;
httpWebRequest.Timeout = timeout;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/json";
httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
var bytes = Encoding.UTF8.GetBytes(request);
Stream requestStream = null;
var responseContent = string.Empty;
try
{
requestStream = httpWebRequest.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
var webResponse = httpWebRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream != null)
{
var streamReader = new StreamReader(stream);
responseContent = streamReader.ReadToEnd();
streamReader.Close();
}
webResponse.Close();
return JsonConvert.DeserializeObject(responseContent);
}
catch (Exception exception)
{
return new T();
}
finally
{
if (requestStream != null)
{
requestStream.Close();
}
}
}
复制代码
第一种返回错误编码的.net core的写法:
复制代码
public async static Task HttpPostWithDecompression(string request, string url, int timeout) where T : new()
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Proxy = null;
httpWebRequest.ContinueTimeout = timeout;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/json";
httpWebRequest.Headers["Accept-Encoding"] = "gzip,deflate";
//httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
var data = Encoding.UTF8.GetBytes(request);
using (var requestStream = await httpWebRequest.GetRequestStreamAsync())//释放
{
requestStream.Write(data, 0, data.Length);
}
string result = string.Empty;
//响应流
using (var response = (HttpWebResponse)await httpWebRequest.GetResponseAsync())
{
Stream responseStream = null;
if (response.StatusCode == HttpStatusCode.OK)
{
responseStream = response.GetResponseStream();
if (responseStream != null)
{
var streamReader = new StreamReader(responseStream, Encoding.UTF8);
//获取返回的信息
result = streamReader.ReadToEnd();
return JsonConvert.DeserializeObject(result);
}
}
}
return new T();
}
复制代码
查看下.net core下的属性和方法:
可以明显发现比.net framwork下少了好多。
也就是.net core的请求类型,更趋于向浏览器的请求头靠拢,也就是使用Headers字典(.net framwork下也有,但是同层级也会有一些属性,比如采用压缩)。
主要的区别就是 响应流 采用的是异步的方式,而.net framwork采用同步的方式,必须手动close(),而新的写法,就只能用using了。
但是,上述的这个方法,害死人了,请求也成功,就是编码始终调试不对,请求各位大神指点一二。
由于水平问题,未能解决上述问题,所以小弟采用.net core的 HttpClientHandler 类进行http请求:
get方法
复制代码
///
/// get请求
///

/// url包含参数
public static async Task doGet(string url) where T : new()
{
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip
};
using (var http = new HttpClient(handler))
{
var response = await http.GetAsync(url);
//确保HTTP成功状态值
response.EnsureSuccessStatusCode();
string responseStr =response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject(responseStr);
}
}
复制代码
post请求
复制代码
///
/// post请求
///

/// url包含参数
public async static Task HttpPostWithDecompression(string request, string apiUrl, int timeout) where T : new()
{
HttpClientHandler handler = new HttpClientHandler();
handler.Proxy = null;
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var data = Encoding.UTF8.GetBytes(request);
using (var httpClient = new HttpClient(handler))
{
httpClient.BaseAddress = new Uri(apiUrl);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var cont = new StringContent(request);
//var content = new FormUrlEncodedContent(JsonConvert.DeserializeObject>(request));
//被上面这个注释掉的代码,这种偷懒转Dic的方式给坑苦了,不能这么用啊!!!
var response = await httpClient.PostAsync(apiUrl, cont);
string result = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject(result);
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
函数f(x-x分之1)=x的平方+x的平方分之1.则f(3
工厂一人工伤全体员工扣除绩效奖金合理吗
野外遇蛇,怎么办?
De Feels是什么档次
tvb艺人参见的台湾综艺节目有哪些
乐乐勇内存/存储有多少,显示屏多大,什
松毅家居地址有知道的么?有点事想过去!
求个华硕的WIN7旗舰版的 OEM
夏日什么凉日漫
怎么用matlab画包络线上下两条都要,急用跪谢
济宁市就业办公室地址在什么地方,想过去办事
知吾者,汝也! 汝甚知吾!什么意思
什么外汇平台可以做欧元兑里拉
怎么做求答案
供佛有讲究 什么最重要
推荐资讯
房屋3楼中间前面放水表有没有关系
我00年的现在可以当兵吗 去那当兵
钟面上,时针从指向2转到指向()是顺时针旋
求几款妹系的galgame,最好汉化的
衣服后面86写着什么意思
HP240G2 TPN-F112 WIN7 的网卡驱动在哪里下
家居风水知识进家门之后最忌讳见到什么
建筑面积140平米套内面积120平米套4室2厅2卫
照片文字说明四要素指什么
买了个木瓜没熟,怎么办?如何让它熟的快些?
请问什么叫sbr技术和sbr反应器
请问,A516cr.70是什么材料
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?