2014-05-07 23 views
20

Tôi hiện đang sử dụng System.Net.Http.HttpClient để hỗ trợ nền tảng chéo.Sửa đổi tiêu đề yêu cầu theo yêu cầu C# HttpClient PCL

Tôi đọc rằng nó không phải là một thực hành tốt để khởi tạo một đối tượng HttpClient cho mỗi yêu cầu và rằng bạn nên sử dụng lại nó bất cứ khi nào có thể.

Bây giờ tôi gặp sự cố khi viết thư viện ứng dụng cho dịch vụ. Một số lệnh gọi API cần phải có tiêu đề cụ thể, một số PHẢI KHÔNG bao gồm tiêu đề cụ thể này.

Dường như tôi chỉ có thể thao tác "DefaultRequestHeaders" sẽ được gửi cùng với từng yêu cầu.

Có tùy chọn nào khi thực sự đưa ra yêu cầu hay không, ví dụ: "client.PostAsync()" chỉ sửa đổi tiêu đề cho yêu cầu cụ thể?

(Thông tin: Yêu cầu có thể được đa luồng).

Cảm ơn trước!

Trả lời

39

Có, bạn có thể tạo một HttpRequestMessage mới, đặt tất cả các thuộc tính bạn cần và sau đó chuyển nó đến SendAsync.

var request = new HttpRequestMessage() { 
    RequestUri = new Uri("http://example.org"), 
    Method = HttpMethod.Post, 
    Content = new StringContent("Here is my content") 
} 
request.Headers.Accept.Add(...); // Set whatever headers you need to 

var response = await client.SendAsync(request); 
+0

@ user2864740 Thật kỳ lạ. Cần có trong cả hai phiên bản. 4.5.1 và PCL. Https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.sendasync(v=vs.118).aspx –

+1

Oh, sai lầm của tôi .. Tôi đã nhìn vào 'Get..':} – user2864740

+1

@DarrelMiller điều gì xảy ra khi khách hàng phát hành nhiều HttpRequestMessages? Ví dụ, một mã thông báo truy cập cần được truyền vào tiêu đề để nhấn api, tôi thực hiện một yêu cầu và sau đó bạn thực hiện một yêu cầu (cả hai người dùng của một trang web ứng dụng khách) - cá thể HttpClient được chia sẻ giữa các yêu cầu từ tĩnh của nó . Cho phép nói rằng yêu cầu của tôi mất nhiều thời gian hơn của bạn, điều đó có gây ra vấn đề không? – crizzwald

1

Sử dụng HttpContent.Headers. Đơn giản chỉ cần tạo thể hiện HttpContent với các tiêu đề bắt buộc và chuyển nó tới phương thức PostAsync.

+1

Điều này sẽ không hoạt động vì tiêu đề là * yêu cầu * tiêu đề, chứ không phải tiêu đề nội dung. – easuter

Các vấn đề liên quan