处理Web API中的异常

trx

我正在从创建的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错误。我该如何处理。非常感谢任何帮助

Botond Botos

之所以获得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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Web Api异常处理

来自分类Dev

Web API中的异常处理并返回JSON

来自分类Dev

在Web API中处理OnApplicationError事件中的异常

来自分类Dev

在Web API中处理OnApplicationError事件中的异常

来自分类Dev

在RxJava中处理API异常

来自分类Dev

Web API和MVC异常处理

来自分类Dev

Web API和MVC异常处理

来自分类Dev

处理BIRT API中的JDBC异常

来自分类Dev

禁用ASP.NET Web API 2中的* all *异常处理(为我自己腾出空间)?

来自分类Dev

使用NLog在ASP.NET Web API 2.1中进行全局异常处理?

来自分类Dev

Linux上ASP.Net Core Web API中未处理的异常

来自分类Dev

通过Lambda表达式引发异常时如何在ASP.NET Web API中全局处理异常

来自分类Dev

Web API“内存中”请求引发异常

来自分类Dev

在Web API中访问类的异常

来自分类Dev

是否需要完整的示例来使用ASP.NET Web Api中的“ ExceptionHandler”处理未处理的异常?

来自分类Dev

F#:处理Web异常

来自分类Dev

异常处理中的异常处理

来自分类Dev

在Scala中处理Java API调用中的null和异常

来自分类Dev

ASP.NET(C#)Web服务中的异常处理

来自分类Dev

Rest Api 异常处理

来自分类Dev

RESTful API中未处理的异常未得到jsonify'ed

来自分类Dev

在Spring MVC和Rest API中处理异常

来自分类Dev

在Python中处理Web链接

来自分类Dev

Azure Web应用未处理的异常

来自分类Dev

将“未处理的” Web Worker异常标记为已处理

来自分类Dev

DAL中的异常处理

来自分类Dev

在Bluebird中处理异常

来自分类Dev

Scala中的异常处理

来自分类Dev

OCaml中的异常处理