下载微软.new webapi库 (这里使用Nuget库管理包)
1.尽量记得使用awati async 异步操作进行数据处理.
2.在使用异步的时候,尽量使用 .ConfigureAwait(false),来使异步状态解锁,防止死锁
3.在使用webapi进行数据请求的时候, 心中一定要有一个 Url 转义表.否则在发送指令的时候,特变容易出错.
初始化HttpClient类对象
这里插一句嘴: 所谓Rest服务,其实就是大家说的,
一: 定位资源位置,通过ip地址和端口对象,以及资源路径
二:通过 get post put delete 完成对应的增删改查操作.就是这样
private HttpClient client = new HttpClient();
//请求支援对象.
public async Task<List<T>> GetStationResposeDataAsyncList<T>(string path)
{
List<T> station = null;
HttpResponseMessage response = await client.GetAsync(path).ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
station = await response.Content.ReadAsAsync<List<T>>().ConfigureAwait(false);
}
else
{
Console.WriteLine(@"响应失败...");
}
return station;
}
我这里是请求了一连串数据,所以这里直接做成了模板
1.注意我这里 ConfigureAwait(false). 防止死锁,这就是关键部分了.
2.接着看调用实现:
SoilRequest soilRequest = new SoilRequest()
{
key = StationKey,
stationId = StationID,
startTime = starttime,
endTime = endtime
};
string strpath = getRequestStationTypeUrl<SoilRequest>(HttpRestClass.RequestEnum.SoilEnum, soilRequest).ToString();
Thread.Sleep(1000);
List<SoilResponse> soilResponseList = new List<SoilResponse>();
soilResponseList = GetStationResposeDataAsyncList<SoilResponse>(strpath).Result;
//注意这里
SoilRequest 以及 SoilResponse这两个类.
SoilRequest: 这个类是对应着Rest服务后台的数据结构需要的请求格式.
SoilResponse:这个类是对应Rest服务的响应数据结构, 具体需要大家自己和Rest后台对接.
以上就是数据请求和接收的主要过程了.
在这个过程,大家一定要注意 发送的 指令格式 , 注意URL 的转义,不然特别容易出错.
方式一:
HttpResponseMessage response = await client.GetAsync(urlPath).ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
using (System.IO.Stream strem = response.Content.ReadAsStreamAsync().Result)
{
System.Drawing.Image img = System.Drawing.Image.FromStream(strem);
img.Save("./temp.png", System.Drawing.Imaging.ImageFormat.Png);
ms.Close();
}
}
方式二:
if (response.IsSuccessStatusCode)
{
using (FileStream fs = File.Create(@".\temp22222.png"))
{
Stream streamFromService = await response.Content.ReadAsStreamAsync();
streamFromService.CopyTo(fs);
}
}
这两种方式都可以缓存下来图像
顺便提一句,视频流的方式,估计也是这种方式,只不过可能需要放入线程里来
以上就是访问Rest服务的一些关键地方, 至于修改post, delete 等操作,都是上面那个模板类的变形, 都大同小异,这个就是核心的代码了,
这里也是记录一下,以防自己以后忘记,那就不好玩了.