使用 HttpClient 请求 Web Api

时间:2022-05-31 19:54:37
1.获取 post 请求 body 内容

[HttpPost]
public string GetId()
{
  //如果方法参数里面有 [FromBody],则需要重新调整内容指针,再进行读取。 //Request.Content.ReadAsStreamAsync().Result.Seek(0,System.IO.SeekOrigin.Begin);
  string content = Request.Content.ReadAsStringAsync().Result;   return content; }

  

 

方法名称 描述
GetAsync 发送一个GET请求到指定的Uri,异步操作。
GetByteArrayAsync 向指定的Uri发送一个GET请求,并将返回响应的数据作为一个字节数组,异步操作。
GetStreamAsync 向指定的Uri发送一个GET请求,并返回响应的数据流,异步操作。
GetStringAsync 向指定的Uri发送一个GET请求,并将返回响应的数据转换为Sting,异步操作。
PostAsync 向指定的Uri发送一个POST请求,异步操作。
PostAsJsonAsync 向指定的Uri发送一个Post请求,返回数据格式为json,异步操作。
PostAsXmlAsync 向指定的Uri发送一个Post请求,返回数据格式为xml,异步操作。
PutAsync 向指定的Uri发送一个Put请求,异步操作。
PutAsJsonAsync 向指定的Uri发送一个Put请求,返回数据格式为json,异步操作。
PutAsXmlAsync 向指定的Uri发送一个Put请求,返回数据格式为xml,异步操作。
DeleteAsync 向指定的Uri发送一个Delete请求,异步操作。

 

 private static void SendRequest()
        {
            using (var client = new System.Net.Http.HttpClient())
            {
                
                client.BaseAddress = new Uri("http://192.168.1.3:42561/");
                var url = "apitest/order/pager";

                //添加自定义头信息
                client.DefaultRequestHeaders.Add("name", "wjire");

                //设置头信息中的 Authorization
                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("scheme", "Mima");


                //PostAsJsonAsync 及上表中几个类似方法都需要引用nuget中的 Microsoft.AspNet.WebApi.Client


                //Post方法一:用json格式传递参数
                //client.PostAsJsonAsync(url, new Person { Name = "fffff", Id = 123, Age = 100 }).ContinueWith(GetResponse);;


                //Post方法二:匿名类,原理同方法一 
                //var content = new
                //{
                //    Name = "gg",
                //    Id = 1,
                //    Age = 1
                //};
                //client.PostAsJsonAsync(url, content).ContinueWith(GetResponse);;


                //Post方法三: 原生的键值对形式传递参数
                //var content = new FormUrlEncodedContent(new Dictionary<string, string>
                // {
                //    {"id","1" },
                //    {"name","wjjj" },
                //    {"age","100" }
                // });
                //client.PostAsync(url, content).ContinueWith(GetResponse);;


                //Get方式
                //这里如果要传递参数,参数个数必须包含请求的API接口所接收的所有参数,只能多,不能少,否则无法传递.其实多了也没有意义
                var task = client.GetAsync(url + "?age=100&id=121&name=go1ng").ContinueWith(GetResponse);


                Console.ReadLine();
            }
        }

        private static void GetResponse(Task<HttpResponseMessage> obj)
        {
            var getResult = obj.Result;

            //判断请求是否成功
            var isSuccess = getResult.IsSuccessStatusCode;
            if (isSuccess)
            {
                //这里当然也可以转成自定义类
                var readResult = getResult.Content.ReadAsAsync<dynamic>();
                var model = readResult.Result;
                Console.WriteLine(model.Age);
                Console.WriteLine(model.Name);
                Console.WriteLine(model.Id);
            }
        }