2012-01-20 39 views
1

這裏是我用來POST到REST風格的web服務中的代碼。我的問題是最後一行。 例如,我的服務器可以使用不同的消息和相同的代碼進行回覆。 現在,除非我得到200好,我只是在最後一行得到例外。從http調用得到正確的響應,不是例外

我想更好地訪問響應頭等,無論我得到什麼代碼。這怎麼可能?

var request = WebRequest.Create(Options.DitatServerUri + Options.DitatAccountId + "/integration/trip") as HttpWebRequest; 
      if (request == null) return false; 

      request.ContentType = "application/json"; 
      request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Options.DitatLoginName + ":" + Options.DitatPassword))); 
      request.Method = "POST"; 

      var serializer = new JavaScriptSerializer(); 

      var serializedData = serializer.Serialize(trip); 

      var bytes = Encoding.UTF8.GetBytes(serializedData); 

      request.ContentLength = bytes.Length; 
      var os = request.GetRequestStream(); 
      os.Write(bytes, 0, bytes.Length); 
      os.Close(); 

      var response = request.GetResponse(); 

例如:我得到了WebException「無效的操作」,但服務器實際發送錯誤說明的消息。

+1

有什麼異常?您是否閱讀了[手冊](http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.getresponse.aspx)? – Jon

+0

它返回'WebException'。足夠好我猜 - 我得到HTTP代碼,但我想讀取標題等,我不抱怨其他例外。我只想在服務器實際響應時對響應有更多的控制 – katit

+0

對於標題,請檢查WebException.Response.Headers。 –

回答

1

建立在什麼上面喬恩在評論中說,拋出一個糟糕的狀態代碼的例外是最有可能是WebException,其中有響應和狀態屬性,每this MSDN page。因此,您可以通過以下方式獲得回覆:

WebResponse response = null; 
try 
{ 
    response = request.GetResponse(); 
} 
catch (WebException ex) 
{ 
    response = ex.Response; 
} 
+0

謝謝!這是腦屁..我沒有意識到我可以挖掘到異常。 – katit

1

爲什麼不捕捉異常並適當地處理它?

try 
{ 
    var response = request.GetResponse(); 
} 
catch (WebException webEx) 
{ 
    Console.WriteLine("Error: {0}", ((HttpWebResponse)webEx.Response).StatusDescription); 
} 
相關問題