5

Ai đó có thể giúp xóa bỏ việc sử dụng thuộc tính "StatusCode" trong HttpWebResponse và WebException không?C# HttpWebRequest.GetResponse - cách sử dụng StatusCode được xử lý như thế nào cho một phản ứng ngoại lệ so với ngoại lệ?

Ví dụ có vẻ như nếu:

a) không có ngoại lệ, sau đó các HttpWebResponse sẽ có một StatusCode rằng có thể có một số giá trị mà chỉ ra cả hai: - thành công (ví dụ như OK, Accepted vv) - thất bại (ví dụ UseProxy, RequestTimeout vv)

b) có một ném WebExeption, mà chính nó có một đối tượng phản ứng đó một lần nữa có một StatusCode (mà tôi giả định được dựa trên Enumeration HttpStatusCode cùng.

Câu hỏi 1 - Có bất kỳ sự nhất quán nào về những gì StatusCode sẽ kích hoạt một WebException (và bạn sẽ nhận được chi tiết trong ngoại lệ), so với thứ sẽ trở lại mà không có ngoại lệ, nhưng bạn sẽ tìm ra kết quả trong StatusCode của đối tượng phản hồi?

Câu hỏi 2 - Hoặc cụ thể hơn mã pseduo (hoặc C# mã riêng của mình) cho cố gắng để xử lý một cuộc gọi httpWebRequest.GetResponse như vậy mà bạn muốn phân biệt giữa các loại phản ứng cho người sử dụng là những gì:

  • cài đặt proxy/vấn đề ủy quyền => như vậy có thể nói với người sử dụng để sửa chữa cài đặt proxy kết nối

  • vấn đề/web-server xuống => nên dùng biết về các

    này
  • lỗi phía máy chủ (ví dụ: máy chủ là có nhưng có một vấn đề xử lý yêu cầu - ví dụ như nội dung không có) => vì vậy người dùng có thể nâng cao với người quản lý trang web

  • trường hợp thành công (và tôi giả định này sẽ là nhiều hơn chỉ là OK) => na (trường hợp thành công)

nhờ

Trả lời

4

Theo kinh nghiệm của tôi các mã trạng thái phản ứng chỉ trả 200 hoặc 0. Bất cứ điều gì khác đi kèm thông qua WebException, bao gồm lỗi proxy như 407 hoặc 417.

4

WebException được ném bất cứ khi nào yêu cầu web không thể thực thi thành công. Ví dụ: 400 và 500 chuỗi phản hồi.

WebExcpetion có thuộc tính có tên Trạng thái sẽ trả lại trạng thái thực tế của phản hồi tức là 500 (Lỗi máy chủ nội bộ).

Dưới đây là danh sách của tất cả các mã phản ứng: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

================================ ===============================================

Nói chung:

1xx chuỗi mã = ​​phản hồi tạm thời. Đây không phải là mã lỗi. Ví dụ: 100 Tiếp tục phản hồi cho biết rằng khách hàng nên tiếp tục với yêu cầu của nó.Thông thường WebRequest sẽ không trả về phản hồi như vậy, và xử lý nó bằng cách gửi phần còn lại của yêu cầu.

2xx chuỗi mã = ​​Yêu cầu đã được nhận, hiểu và chấp nhận thành công. Đây không phải là mã lỗi. Ví dụ: 200 OK

3xx chuỗi mã = ​​Cần thực hiện thêm hành động. Nói chung đây không phải là mã lỗi (thường là hướng của nó) cho ví dụ '301 Chuyển Vĩnh viễn', có nghĩa là tài nguyên đang được yêu cầu được chuyển đến một vị trí mới, vì vậy bất kỳ yêu cầu nào khác của khách hàng phải trên URL mới được cung cấp trong phản ứng.

HOẶC '305 Sử dụng Proxy', tùy thuộc vào kết quả của bạn trong Ngoại lệ.

4xx chuỗi mã = ​​Lỗi máy khách. Đây có thể dẫn đến ngoại lệ. ví dụ: '400 Yêu cầu Không hợp lệ' hoặc '401 Không được ủy quyền'

5xx chuỗi mã = ​​Lỗi máy chủ. Đây có thể dẫn đến ngoại lệ. ví dụ: '500 Lỗi Máy chủ Nội bộ' hoặc 'Thời gian chờ Cổng 504'

+0

Nhưng có bao nhiêu mã trả lại có thể có cho trường hợp ngoại lệ khi bạn nhận được phản hồi trực tiếp? Có một số mã phản ứng khác nhau trong phạm vi 200 chẳng hạn. Hoặc là phản ứng đầu tiên đúng ở đây trong đó chỉ có 200 hoặc 0 là có thể cho trường hợp ngoại lệ không? – Greg

+0

Đã cập nhật câu trả lời. – ata

+0

Cảm ơn - vì vậy điều này có nghĩa là tôi giả sử bạn có thể het ví dụ: phản hồi thành công (tức là không có ngoại lệ) nhưng Mã trạng thái là 300 nơi tổng thể thì đó vẫn là vấn đề cho người dùng? Đó là sau đó để kiểm tra sự thành công thực sự bạn cần phải kiểm tra cho WebException + kiểm tra mã trạng thái trong phạm vi 200 sau đó? – Greg