8

Tôi đã săn lùng xung quanh một số tài liệu dứt khoát về vấn đề này nhưng không có nhiều may mắn khi tìm thấy bất kỳ tài liệu nào.HttpWebRequest.GetResponse() - mã trạng thái cụ thể nào khiến một ngoại lệ bị ném ra?

Về cơ bản - câu hỏi là - mã HTTP trạng thái nào sẽ trở lại từ máy chủ sẽ HttpWebRequest.GetResponse() tạo ra một ngoại lệ Web sau khi thực hiện một cái gì đó như nói, một POST?

Cụ thể - nó sẽ tạo ra một ngoại lệ cho bất kỳ điều gì khác ngoài trạng thái 200 OK? Hoặc nó sẽ chỉ tạo ra một WebException cho biết, 400, 404, và 500 (vì lợi ích của đối số).

Tôi muốn biết, máy chủ tôi đang liên lạc xác định bất kỳ điều gì khác ngoài HTTP 200 OK quay lại dưới dạng điều kiện lỗi - và điều quan trọng là, tôi có thể dựa vào WebException được tạo cho bất kỳ điều gì khác ngoài 200 không? (Hiện tại tôi đã viết mã của mình để nó thực sự kiểm tra mã trạng thái trả về mọi lúc để đảm bảo nó là 200 OK và nếu không, hãy thực hiện hành động thích hợp - nhưng rất nhiều sự trùng lặp giữa nó và khối catch cho một WebException, và tôi hy vọng làm sạch nó ...)

Bất kỳ liên kết nào có liên quan đến tài liệu sẽ được đánh giá cao nhất.

Cảm ơn!

+0

Xem câu trả lời sau đây cho một câu hỏi liên quan để phân tích kỹ lưỡng: http://stackoverflow.com/questions/ 2182544/c-httpwebrequest-getresponse-how-is-statuscode-usage-handling-for-a-non-excepti/2183380 # 2183380 –

Trả lời

1

Hệ thống ngoại lệ trên web là seperate system từ HTTP error system. Điều này chủ yếu là do lỗi HTTP được trình duyệt hoặc ứng dụng khách trả về và WebException được máy chủ gửi trong khi xây dựng trang của bạn. Bởi thời gian một lỗi HTTP được tìm thấy trang được gửi đến khách hàng và bạn sẽ không biết về nó.

0

Tôi nghĩ rằng nó sẽ, nhưng nó có vẻ giống như một giả định mạo hiểm để thực hiện. Đối với một điều, các MSDN docs làm cho nó rõ ràng rằng GetResponse sẽ ném ngoại lệ khác hơn là chỉ WebException. Tuy nhiên, tôi có thể nói chắc chắn từ trải nghiệm rằng phản hồi "304 không được sửa đổi" sẽ bị ném như là WebException.

Tất cả các cuộc nói chuyện này là tạo ra một Mã Smiff ngửi; không sử dụng ngoại lệ để kiểm soát luồng thực thi. Bạn sẽ tốt hơn khi xử lý các ngoại lệ một cách thích hợp, sau đó kiểm tra rõ ràng thuộc tính StatusCode cho các giá trị cho phép của bạn.

+0

WebException chính nó được bắt đúng và kiểm tra - vấn đề là tuy nhiên là nếu phương pháp getresponse không tạo ra một WebException mà chỉ đơn giản là cho phép mọi thứ tiến hành trong một số trường hợp nhất định (tức là từ mọi thứ tôi đã thấy trừ khi máy chủ phát hành HTTP 200 OK - một ngoại lệ xuất hiện ... nhưng không có gì dứt khoát về trường hợp đó hay không trong bất kỳ tài liệu nào Tôi đã nhìn thấy...) –

1

Đã kết thúc thực hiện kiểm tra rõ ràng sau khi trả lời & bắt và kiểm tra Ngoại lệ Web; kết quả trong một số mã trùng lặp nhưng không có câu trả lời dứt khoát về việc liệu một ngoại lệ Web sẽ luôn luôn xảy ra nếu trạng thái KHÔNG là 200.

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