Chúng tôi đang cố gắng triển khai nén gzip tùy chọn do người dùng xác định (trên màn hình cài đặt) trong ứng dụng khách của chúng tôi sử dụng HttpClient
, vì vậy chúng tôi có thể ghi nhật ký và so sánh hiệu suất trên một số cuộc gọi khác nhau khoảng thời gian. Nỗ lực đầu tiên của chúng tôi là chỉ đơn giản là có điều kiện thêm tiêu đề như sau:HttpClient: Điều kiện thiết lập nén AcceptEncoding khi chạy
HttpRequestMessage request = new HttpRequestMessage(Method, Uri);
if (AcceptGzipEncoding)
{
_client.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
}
//Send to the server
result = await _client.SendAsync(request);
//Read the content of the result response from the server
content = await result.Content.ReadAsStringAsync();
này tạo ra các yêu cầu chính xác, nhưng câu trả lời đã giải nén không được giải nén vào trở lại, dẫn đến một phản ứng bị cắt xén. Tôi thấy rằng chúng tôi phải bao gồm các HttpClientHandler
khi xây dựng các HttpClient
:
HttpClient _client = new HttpClient(new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.GZip
});
bài này hoạt động tốt, nhưng chúng tôi muốn thay đổi cho dù khách hàng sẽ gửi Accept-Encoding: gzip
tiêu đề khi chạy, và không làm dường như là bất kỳ cách nào để truy cập hoặc thay đổi HttpClientHandler
sau khi nó được chuyển đến hàm tạo HttpClient
. Ngoài ra, việc thay đổi tiêu đề của đối tượng HttpRequestMessage
không có bất kỳ ảnh hưởng nào đối với tiêu đề của yêu cầu nếu chúng được xác định bởi HttpClientHandler
.
Có cách nào để thực hiện việc này mà không cần tạo lại HttpClient
mỗi lần thay đổi này không?
Chỉnh sửa: Tôi cũng đã cố gắng để thay đổi một tham chiếu đến HttpClientHandler
thay đổi AutomaticDecompression
lúc chạy, nhưng đó là ném ngoại lệ này:
dụ này đã bắt đầu một hoặc nhiều yêu cầu. Chỉ có thể sửa đổi các thuộc tính trước khi gửi yêu cầu đầu tiên.
Chỉ cần tò mò, bây giờ mà bạn đã nhìn thấy cách tiện dụng tự động giải nén là, tại sao * không * tái tạo cho khách hàng mỗi thời gian mà cài đặt thay đổi? Đó là chính xác những gì tôi muốn làm ở đây, trừ khi có một lý do rất tốt không. –
@ToddMenier Đó là một câu hỏi rất hợp lệ. Đó là một cái gì đó chúng tôi đang xem xét, nhưng nó sẽ đòi hỏi một chút về cơ cấu lại tôi nghĩ, bởi vì cùng HttpClient được gắn vào một số lĩnh vực. Đó là một ứng dụng có kích thước vừa phải được kế thừa từ các nhà phát triển trước đó nên chúng tôi chỉ phải quản lý các thay đổi một cách cẩn thận. Chúng tôi sẽ xem xét nó trong tuần này.Cảm ơn các ý kiến và giúp đỡ. – pcdev