.net Rest服务访问

巫马越彬
2023-12-01

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

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

 类似资料: