2015-04-30 20 views
7

Tôi đang sử dụng lớp HttpResponseMessage làm phản hồi từ cuộc gọi AJAX đang trả về dữ liệu JSON từ một dịch vụ. Khi tôi tạm dừng thực hiện sau khi cuộc gọi AJAX quay trở lại từ dịch vụ, tôi thấy lớp này chứa một thuộc tính Nội dung thuộc loại System.Net.Http.StreamContent.Cách đọc nội dung HttpResponseMessage dưới dạng văn bản

Nếu tôi kiểm tra trong trình duyệt tôi thấy cuộc gọi mạng được thực hiện thành công và các dữ liệu JSON như các phản ứng. Tôi chỉ tự hỏi tại sao tôi không thể nhìn thấy văn bản JSON được trả về từ bên trong Visual Studio? Tôi đã tìm kiếm khắp đối tượng System.Net.Http.StreamContent này và không thấy dữ liệu nào.

public async Task<HttpResponseMessage> Send(HttpRequestMessage request) { 
    var response = await this.HttpClient.SendAsync(request); 
    return response; 
} 
+1

Có lẽ bạn muốn cho chúng tôi thấy mã của bạn? –

+0

xin lỗi về điều đó. – PythonIsGreat

+1

Và chính xác thì bạn muốn làm gì? Kiểm tra biến 'response'? –

Trả lời

23

Biểu diễn văn bản của phản hồi được ẩn trong thuộc tính Content của lớp HttpResponseMessage. Cụ thể, bạn sẽ có được câu trả lời như thế này:

response.Content.ReadAsStringAsync();

Giống như tất cả Async phương pháp hiện đại, ReadAsStringAsync trả về một Task. Để có được kết quả trực tiếp, sử dụng tài sản của Result nhiệm vụ:

response.Content.ReadAsStringAsync().Result;

Lưu ý rằng Result chặn. Bạn cũng có thể awaitReadAsStringAsync().

+3

Điều này sẽ trả về một 'Task '. Bạn sẽ cần phải "chờ đợi" trên đó để xem kết quả chuỗi thực tế. –

5

Bạn có thể sử dụng ReadAsStringAsync trên Content.

var response = await client.SendAsync(request); 
var content = await response.Content.ReadAsStringAsync(); 

Lưu ý rằng bạn thường nên sử dụng await - không phải .Result.

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