2013-06-04 42 views

Trả lời

10

Vâng, đó là loại lên đến lớp con cụ thể - nhưng tôi chưa bao giờ thấy bất kỳ phân lớp nào làm như vậy và không được ghi lại làm giá trị trả lại hợp lệ. Tôi chưa bao giờ thấy bất kỳ mã nào được viết để phòng thủ kiểm tra điều này, và tôi không mong đợi. Đó không phải là để nói rằng mã như vậy không tồn tại, nhưng tôi không nghĩ rằng nó là cần thiết.

Nếu không có nội dung nào trong phản hồi (nhưng phản hồi đã thành công), tôi mong đợi mọi triển khai tốt sẽ trả về luồng trống.

+0

nơi bạn tìm thấy "null" không được ghi nhận là giá trị trả lại hợp lệ? Bạn có thể cho tôi liên kết được không? – iotaSingh

+3

@ iotaSingh: Làm thế nào tôi có thể cung cấp cho bạn một liên kết? Tôi đã nói * không được ghi lại *. Tôi không nói rằng nó được ghi nhận là không phải là một giá trị trả lại hợp lệ, tôi nói nó không được ghi nhận là một giá trị trả lại hợp lệ. Đó là những câu lệnh * rất * khác nhau. –

3

Không có loại được tích hợp có nguồn gốc từ WebResponse, cụ thể là HttpWebResponse, có thể trả về giá trị rỗng. Niềm tin mê tín dị đoan này đã làm sai lệch nhiều nhà phát triển. Đừng kiểm tra null. Mã như vậy là mã chết.

Điều gì sẽ vô giá trị trung bình so với trả lại luồng trống? Điều này không có ý nghĩa.

Ngoài ra, GetResponse() không thể trả về giá trị rỗng. Một lần nữa, nghĩa là gì? Giao thức HTTP không hỗ trợ khái niệm "phản hồi null". Nếu điều đó xảy ra do một lỗi thư viện thì không thể xử lý tình huống đó được. Bất kỳ kiểm tra như vậy không giúp đỡ.

Có thể tạo các lớp bắt nguồn từ WebResponse trả về một giá trị điên như null. Không có lớp được xây dựng trong đó làm điều đó và nó nên được coi là một lỗi để trả lại null. Các lớp học có nguồn gốc từ WebResponse là rất hiếm. Tôi chưa thấy cái này bao giờ.

Dưới đây là một mã số mẫu tốt để sử dụng:

var request = WebRequest.Create("http://example.org/"); 

using (var response = request.GetResponse()) 
using (var responseStream = response.GetResponseStream()) 
using (var responseReader = new StreamReader(responseStream)) 
{ 
    var contents = responseReader.ReadToEnd(); 
} 

Nó thể hiện cách ngắn gọn và an toàn đọc nội dung của một URL HTTP sử dụng HttpWebRequest.

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