Tôi đang sử dụng System.Net.WebClient
để thực hiện một số thao tác HTTP ở chế độ không đồng bộ. Lý do để sử dụng các hoạt động không đồng bộ là, trên bất kỳ điều gì khác, thực tế là tôi nhận được chỉ báo thay đổi tiến trình - chỉ có sẵn cho các hoạt động không đồng bộ, như được nêu bởi the docs.Nhận tiêu đề HTTP trong yêu cầu WebClient không đồng bộ
Vì vậy, chúng ta hãy nói rằng tôi đã WebClient tôi thiết lập:
this.client = new WebClient();
this.client.UploadStringCompleted +=
new UploadStringCompletedEventHandler(textUploadComplete);
và các đại biểu:
private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// trigger UI failure notification
return;
}
// FIXME not checking for response code == 200 (OK)
// trigger UI success notification
}
Vì vậy, bạn thấy đấy, tôi giả định rằng nếu không có ngoại lệ xảy ra, các yêu cầu đã luôn thành công (có thể không phải như vậy, vì mã trạng thái phản hồi HTTP có thể là! = 2xx). Từ tài liệu trên UploadFileAsync Tôi không thể biết liệu phản hồi không phải 200 cũng được xử lý.
Tôi là thực sự mới tới C# và dường như tôi không thể tìm cách truy cập vào tiêu đề cho phản hồi của yêu cầu không đồng bộ cụ thể đó. Dường như với tôi rằng mỗi WebClient
chỉ có thể giữ một phản hồi (hoặc một tập hợp các tiêu đề) tại bất kỳ thời điểm nào.
Mặc dù tôi sẽ không thực hiện nhiều yêu cầu song song cùng một lúc, tôi vẫn muốn biết liệu có một cách thanh lịch hơn để lấy tiêu đề/mã trạng thái phản hồi của yêu cầu cụ thể hay không nhận phản hồi "có sẵn cuối cùng" từ số WebClient
.
Cảm ơn.
Bạn có trong .NET 4.5 không? Nếu vậy hãy thử sử dụng quá tải TaskAsync ... bạn vẫn sẽ cần phải truy cập các tiêu đề từ lớp WebClient, nhưng tôi sẽ không thấy điều này có thể bị phản đối ở tất cả bằng cách sử dụng luồng công việc TAP ... Tôi đồng ý rằng bạn cảm thấy hơi sai khi làm điều đó trong một trình xử lý sự kiện thông thường. 'await client.UploadStringTaskAsync (...); var headers = client.ResponseHeaders; ' – TCC