我正在从创建的Web API调用Web API。我正在调用的API以XML格式返回响应
<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;
但有时,API中没有<udf>
带有帐户ID的字段。
<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时,这不会返回我期望的响应,而是引发HTTP 500错误。我该如何处理。非常感谢任何帮助
之所以获得HTTP状态500,是因为您NullReferenceException
的代码中有一个例外:您正在访问方法调用Value
结果中的属性FirstOrDefault
,当没有元素可以满足指定条件时该方法将返回null。
您可以尝试类似:
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" }));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句