如何在HttpClient的HttpRequestMessage上设置一个cookie

我正在尝试使用web api的HttpClient来发送一个端点,需要以HTTP cookie的formslogin,这个HTTP cookie标识了一个帐号(这只是从发行版本中#ifdef删除的东西)。

如何添加一个cookie到HttpRequestMessage

以下是您可以如何为请求设置自定义Cookie值:

 var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("foo", "bar"), new KeyValuePair<string, string>("baz", "bazinga"), }); cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value")); var result = client.PostAsync("/test", content).Result; result.EnsureSuccessStatusCode(); } 

接受的答案是在大多数情况下做到这一点的正确方法。 但是,在某些情况下,您需要手动设置Cookie标头。 通常情况下,如果您设置了“Cookie”标头,它将被忽略,但是这是因为HttpClientHandler默认使用CookieContainer属性来存储Cookie。 如果你禁用了,那么通过设置UseCookiesfalse你可以手动设置cookie头,他们会出现在请求,例如

 var baseAddress = new Uri("http://example.com"); using (var handler = new HttpClientHandler { UseCookies = false }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var message = new HttpRequestMessage(HttpMethod.Get, "/test"); message.Headers.Add("Cookie", "cookie1=value1; cookie2=value2"); var result = await client.SendAsync(message); result.EnsureSuccessStatusCode(); }