Các accepted answer là cách chính xác để làm điều này trong nhiều trường hợp. Tuy nhiên, có một số tình huống mà bạn muốn đặt tiêu đề cookie theo cách thủ công. Thông thường, nếu bạn đặt tiêu đề "Cookie", nó sẽ bị bỏ qua, nhưng đó là vì mặc định là HttpClientHandler
để sử dụng thuộc tính CookieContainer
cho cookie. Nếu bạn vô hiệu hóa điều đó sau đó bằng cách đặt UseCookies
thành false
, bạn có thể đặt tiêu đề cookie theo cách thủ công và chúng sẽ xuất hiện trong yêu cầu, ví dụ:
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();
}
Nguồn
2012-11-08 10:31:34
trình xử lý có thể bị xóa khỏi sử dụng câu lệnh, trình xử lý sẽ được xử lý khi máy khách http được xử lý. – Kimi
Kimi là chính xác, nhưng bạn cũng không nên bọc HttpClient của bạn trong một sử dụng. http://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ – AdvancedREI
THẬN TRỌNG: nếu bạn chỉ sử dụng 1 phiên bản của HttpClient để thực hiện một số yêu cầu, cookie sử dụng CookieContainer sẽ được lưu vào bộ nhớ cache. Nguy hiểm cho người dùng nhận cookie từ một người dùng khác. –