.net Rest服务访问

    技术2022-07-10  95

    Rest服务访问

    工具下载:

    下载微软.new webapi库 (这里使用Nuget库管理包)

    里面一些关键点记录

    1.尽量记得使用awati async 异步操作进行数据处理. 2.在使用异步的时候,尽量使用 .ConfigureAwait(false),来使异步状态解锁,防止死锁 3.在使用webapi进行数据请求的时候, 心中一定要有一个 Url 转义表.否则在发送指令的时候,特变容易出错.

    这里记录关键WebApi的使用方式

    初始化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 等操作,都是上面那个模板类的变形, 都大同小异,这个就是核心的代码了,

    这里也是记录一下,以防自己以后忘记,那就不好玩了.

    Processed: 0.013, SQL: 9