2014-09-26 35 views
4

我想了解一些關於HttpWebRequest的異常處理。HttpWebRequest WebException ProtocolError

我有一個客戶端庫,它正在向WebAPI控制器發出請求;我知道請求會拋出一個異常,並且包含消息「實體已經存在 - 1234」。

當我得到迴應;

using (HttpWebResponse response = (HttpWebResponse)r.GetResponse()) 
{ 
    if (response.StatusCode == HttpStatusCode.OK) 
     using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      return reader.ReadToEnd(); 

    return "Invalid"; 
} 

我得到一個拋出的WebException。所以,請求的調用者有一個try..catch。我得到了WebException。我得到的是一個協議錯誤,而不是所引發的500內部服務器錯誤(使用正確的狀態代碼來表示消息晚些時候發生)。現在,如果我閱讀WebException的Response,它確實包含我的消息和堆棧跟蹤。

問題

  • 爲什麼我不能在我的迴應得到的500狀態碼,爲什麼它拋出一個協議錯誤?
  • 是否有更正確的方式來處理請求?

我搜查了一下,發現有些人在沒有使用正確的標題等時出現此問題。但據我所知,我已經添加了所有標題,我可以仍然得到相同的行爲。

+0

500是* HTTP協議*中指定的錯誤代碼;例外意味着「我使用的協議發出了錯誤信號」。 500本身將位於webexception響應狀態碼屬性中。 – 2014-09-26 15:35:30

+0

那麼,通過拉動webexception響應來處理這個問題的正確方法呢?還是在我返回異常的方式中出現錯誤?我不習慣像這樣處理異常,我通常能夠處理狀態碼並從那裏開始。 – Hammerstein 2014-09-26 18:18:00

回答

0

500 internal server error通常意味着API收到請求,但在處理它時拋出未處理的異常,從而導致「內部服務器錯誤」。

您可以登錄到數據庫或記錄所有API的未處理異常,以幫助您進行調試過程。祝你好運。