簡體   English   中英

C#HttpWebRequest.GetResponse - 如何處理非異常與webexception響應的StatusCode用法?

[英]C# HttpWebRequest.GetResponse - how is StatusCode usage handled for a non-exception vs webexception response?

有人可以幫助清除HttpWebResponse和WebException中“StatusCode”屬性的用法嗎?

例如,似乎如果:

a)沒有異常,那么HttpWebResponse將有一個StatusCode可以有一些值,表明兩者: - 成功(例如OK,Accepted等) - 失敗(例如UseProxy,RequestTimeout等)

b)有一個WebExeption throw,它本身有一個響應對象,它又有一個StatusCode(我假設它是基於相同的HttpStatusCode枚舉)。

問題1 - 在StatusCode將觸發WebException(並且您在異常中獲取詳細信息)方面是否存在任何一致性,相比之下,沒有異常會返回但是您會在StatusCode中找到結果響應對象?

問題2 - 或者更具體地說,嘗試處理httpWebRequest.GetResponse調用的pseduo代碼(或C#代碼本身)是什么,以便您想要區分用戶的響應類別:

  • 代理設置/代理問題=>所以可以告訴用戶修復代理設置

  • 連接問題/ web-server down =>所以用戶意識到這一點

  • 服務器端錯誤(例如服務器在那里,但處理請求有問題 - 例如內容不在那里)=>所以用戶可以提出網站管理員

  • 成功案例(我認為這不僅僅是OK)=> na(成功案例)

謝謝

根據我的經驗,響應狀態代碼僅返回200或0.其他任何內容都來自WebException,包括代理錯誤,如407或417。

只要無法成功執行Web請求,就會拋出WebException。 例如400和500系列的回復。

WebExcpetion有一個名為Status的屬性,它將返回響應的實際狀態,即500(內部服務器錯誤)。

以下是所有回復代碼的列表: http//www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

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

一般來說:

1xx系列代碼=臨時響應。 這些不是錯誤代碼。 例如,100 Continue響應,告知客戶端應繼續其請求。 通常,WebRequest不會返回此類響應,並通過發送其余請求來自行處理。

2xx系列代碼=請求已成功接收,理解和接受。 這些不是錯誤代碼。 例如200 OK

3xx系列代碼=需要采取進一步行動。 通常這不是錯誤代碼(通常用於重定向),例如'301 Moved Permanently',這意味着正在請求的資源被移動到新位置,因此客戶端的任何進一步請求應該在提供的新URL上在回應中。

或'305使用代理',根據您導致異常。

4xx系列代碼=客戶端錯誤。 這些可能導致異常。 例如'400 Bad Request'或'401 Unauthorized'

5xx系列代碼=服務器錯誤。 這些可能導致異常。 例如'500 Internal Server Error'或'504 Gateway Timeout'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM