2016-12-30 14 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の値を抽出して文字列に格納しています。私は

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; 

を使用していたコードしかし、それにはアカウントIDとフィールド<udf>を持っているのdoesnt時々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呼び出しのような応答を作成したいと考えています。だから私は以下のコード

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

これは、IDアカウントがない場合、私は期待していレスポンスを返すdoesnotではなくHTTP 500エラーをスローしaddded。どうすればこれを処理できますか?あなたのコードでNullReferenceException例外を持っているので、すべてのヘルプは大幅

+0

:?

あなたのような何かを試すことができますか –

+0

accountIDという文字列がnullの場合、レスポンスを作成しています。返すResponseMessage(Request.CreateResponse(new {error = "無効なAPI呼び出し"}))); ' – trx

+0

*クライアント側*? –

答えて

1

あなたがHTTPステータス500を取得する理由をappreciaedされている:あなたはありません要素ができるnullを返します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

関連する問題