2017-10-09 50 views
3

我正在使用以下代碼來完成外部API調用。在Postman Body中捕獲外部API錯誤消息

WebResponse response = request.GetResponse(); 

    string JSONResult = null; 
    var data = response.GetResponseStream(); 
    using (var reader = new StreamReader(data)) 
    { 
    JSONResult = reader.ReadToEnd(); 
    } 

當外部API發生異常時,request.GetResponse會引發錯誤。但是,我無法看到顯示的信息,例如

{ 
     "Message": "No HTTP resource was found that matches the request URI '<site>/Foo'.", 
     "MessageDetail": "No type was found that matches the controller named 'Foo'." 
} 

雖然這是顯示在Fiddler和郵差,我不能得到這個消息,當它被拋出作爲例外。

當外部API調用發生錯誤時,如何獲取此特定詳細信息?

+0

try {} catch(Exception ex){throw ex} – AGrammerPro

+0

@AGrammerPro不幸的是它需要更多的工作。看到我的答案。 – CodingYoshi

+1

@CodingYoshi我upvoted你的答案:) – AGrammerPro

回答

2

您需要捕捉異常,然後閱讀異常的響應流。讀取異常的響應流與讀取請求的響應相同。這裏是如何:

WebRequest request = 
WebRequest.Create("http://..."); 
WebResponse response = null; 
try 
{ 
    response = request.GetResponse(); 
} 
catch (WebException webEx) 
{ 
    if (webEx.Response != null) 
    { 
     using (var errorResponse = (HttpWebResponse)webEx.Response) 
     { 
      using (var reader = new StreamReader(errorResponse.GetResponseStream())) 
      { 
       string error = reader.ReadToEnd(); 
       // TODO: use JSON.net to parse this string 
      } 
     } 
    } 
} 

不要把所有的代碼上面try塊內,因爲你只嘗試(荷蘭國際集團)和(荷蘭國際集團)的request.GetResponse()。剩下的代碼需要放在try catch塊之外,這樣你就可以分別從代碼中捕獲異常。