使用 HttpClient 请求 Web Api
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); } }