c# HttpClient 给webapi post接口传递一个参数。传递参数的同时传递一个cookie 电脑版发表于:2020/5/22 18:23 webapi post传递一个参数是真的坑,有多坑,可以看看这篇文章: https://www.tnblog.net/aojiancc2/article/details/2874 <br> #####当然现在说的是怎么用HttpClient来调用webapi post只有一个参数的情况 webapi如下,就是一个非常简单的post ``` [HttpPost] public void Post([FromBody]string value) { } ``` 开始尝试调用,肯定要避免第一个坑,键名为空 ``` var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; HttpClient httpClient = new HttpClient(handler); var content = new FormUrlEncodedContent(new Dictionary<string, string>() { {"", "hhhh"}//键名必须为空 }); var response = httpClient.PostAsync("your address", content).Result; //确保HTTP成功状态值 response.EnsureSuccessStatusCode(); //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) string result = response.Content.ReadAsStringAsync().Result; ``` 然鹅报错:StatusCode: 415, ReasonPhrase: 'Unsupported Media Type' <br> #####按照js调用的经验,设置一个json格式在尝试一下 ``` var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; HttpClient httpClient = new HttpClient(handler); var content = new FormUrlEncodedContent(new Dictionary<string, string>() { {"", "hhhwww"}//键名必须为空 }); //设置json格式 content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = httpClient.PostAsync("你的地址", content).Result; //确保HTTP成功状态值 response.EnsureSuccessStatusCode(); //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) string result = response.Content.ReadAsStringAsync().Result; ``` 然鹅,和ajax调用一样报错:StatusCode: 400, ReasonPhrase: 'Bad Request <br> #####按照ajax调用的经验,把它换成stringcontent传值把,注意三点,不能有key,而且格式设置成json,还有就是格式用json序列化一下 ``` httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); StringContent strcontent = new StringContent(JsonConvert.SerializeObject("alal"), Encoding.UTF8, "application/json"); var result = httpClient.PostAsync("your address", strcontent).Result; ``` <br> #####传递参数的同时传递一个cookie ``` HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); StringContent strcontent = new StringContent(JsonConvert.SerializeObject("aa"), Encoding.UTF8, "application/json"); var message = new HttpRequestMessage(HttpMethod.Post, "your address"); //设置cookie信息 message.Headers.Add("Cookie", "token=" + token); //设置contetn message.Content = strcontent; //发送请求 var httpResponseHeaders = httpClient.SendAsync(message).Result; ``` 搞定收工 ![](https://img.baidu.com/hi/tsj/t_0001.gif)