2016-12-30 58 views
0

我正在從創建的Web API調用Web API。該API我打電話回報像在Web API中處理異常

<lab:lab uri="https://bh03.org/api/lb/3" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab"> 
<name>GTech</name> 
<udf:field type="String" name="Account ID">gt</udf:field> 
<website/> 
</lab:lab> 

這我提取賬戶ID的值,並將其存儲在字符串中的XML響應。

下面的代碼我使用

using (var client_LabURL = new HttpClient()) 
{ 
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); 
    Uri Uri_LabURL = new Uri(result_LabURL); 
    client_LabURL.BaseAddress = Uri_LabURL; 
    client_LabURL.DefaultRequestHeaders.Accept.Clear(); 
    client_LabURL.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 
    client_LabURL.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray_Clarity)); 
    var response_LabURL = client_LabURL.GetAsync(Uri_LabURL).Result; 
    string responseString_LabURL = response_LabURL.Content.ReadAsStringAsync().Result; 
    XDocument new_doc = XDocument.Parse(responseString_LabURL); 
    XNamespace ns = "http://ge.com/ri/userdefined"; 
    string accountID = new_doc.Descendants(ns + "field").FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")).Value; 

但有時可是沒有現場<udf>在其帳戶ID的API。

<lab:lab uri="https://bh03.org/api/v2/labs/1302" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab"> 
<name>lsd</name> 
</lab:lab> 

在這種情況下,我想創建一個響應,如無效的API調用。所以我addded下面的代碼

if (string.IsNullOrEmpty(accountID)) 
    { 
    return ResponseMessage(Request.CreateResponse(new { error = "Invalid API Call" })); 
    } 

這亙古不變的返回我期待的迴應時,沒有帳戶ID,而是拋出HTTP 500錯誤。我該如何處理這個問題。任何幫助是極大appreciaed

+0

什麼是響應你究竟期待? –

+0

我創建一個響應,如果字符串accountID爲null或空返回'ResponseMessageRequest(Request.CreateResponse(new {error =「Invalid API Call」}));' – trx

+0

我的意思是,你期待什麼反應*客戶端*? –

回答

1

爲什麼你的HTTP狀態500究其原因,是因爲你在你的代碼NullReferenceException例外:你在FirstOrDefault方法調用,它返回空的結果訪問Value財產時,沒有元素可以滿足指定的條件。

你可以嘗試這樣的:

var accountIdField = new_doc 
    .Descendants(ns + "field") 
    .FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")); 

if (accountIdField == null) 
{ 
    return ResponseMessage(Request.CreateResponse(new { error = "Invalid API Call" })); 
} 
+0

真棒這工作。萬分感謝 – trx