今天研究了一天C#如何添加cookie到httpcient里面,从而发请求时,能把cookie作为头部发出,最后发现根本加不进去。Httpclient的cookie是来自上一个请求的响应,httpclient会自动把上一个请求的响应里面的cookie保存起来,所以当发送几个有关联的request,就必须要用同一个Httpclient示例://第一个请求 HttpClient client = new HttpClient(); // 为JSON格式添加一个Accept报头 //client.DefaultRequestHeaders.Accept.Add( // new MediaTypeWithQualityHeaderValue("application/json")); string strDecodeBody = HttpUtility.UrlEncode(strBody); HttpContent content = new StringContent(strDecodeBody); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0"); client.DefaultRequestHeaders.Add("Authentication", "123"); HttpResponseMessage response = null; response = client.PostAsync(strIP, content).Result; if (response != null) { if (expectCode == HttpStatusCode.OK) { var resultValue = response.Content.ReadAsStringAsync().Result; string strResponse = HttpUtility.UrlDecode(resultValue.ToString()); string[] strCookies = (string[])response.Headers.GetValues("Set-Cookie"); if(strCookies.Length>0) { strCookie = strCookies[0].Substring(0, strCookies[0].IndexOf(';')); } } } //第二个请求,在这个请求里,没有设置cookie,由于跟第一个请求使用相同httpclient,所以cookie会自动放入请求头部发给服务器 string strEncodeBody = HttpUtility.UrlEncode(strBody); HttpContent content = new StringContent(strEncodeBody); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpResponseMessage response = null; response = client.PostAsync(strIP, content).Result; if (response != null) { if (expectCode == HttpStatusCode.OK) { var resultValue = response.Content.ReadAsStringAsync().Result; string strResponse = HttpUtility.UrlDecode(resultValue.ToString()); return strResponse; } }顶