C# 使用Xamarin返回错误消息REST API
我正在开发(至少正在尝试…)一个XamarinAndroid应用程序,并连接到API。下面是一个基本的例子,我试图做什么与一个职位。我不知道如何将错误消息(不仅仅是代码)返回给客户端?只要能提供一个完整的例子,我愿意找到更好的方法 API代码:C# 使用Xamarin返回错误消息REST API,c#,android,rest,xamarin,C#,Android,Rest,Xamarin,我正在开发(至少正在尝试…)一个XamarinAndroid应用程序,并连接到API。下面是一个基本的例子,我试图做什么与一个职位。我不知道如何将错误消息(不仅仅是代码)返回给客户端?只要能提供一个完整的例子,我愿意找到更好的方法 API代码: [HttpPost("Consume")]//* public IActionResult ConsumeInventory([FromBody] Part part) { try { _repo.ConsumeInven
[HttpPost("Consume")]//*
public IActionResult ConsumeInventory([FromBody] Part part)
{
try
{
_repo.ConsumeInventory(part);
}
catch (Exception ex)
{
//ModelState.AddModelError("Error", ex.Message);
return NotFound("Not Enough Inventory");
}
return Ok(part);
}
客户端呼叫:
public async Task<HttpResponseMessage> UpdatePartAsync(Part part, string post_url)
{
string jsonString = JsonConvert.SerializeObject(part);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsync("invcount/" + post_url, new StringContent(jsonString, Encoding.UTF8, "application/json"));
if (response.StatusCode == HttpStatusCode.NotFound)
{...//Would like to display "Not enough Inventory" in here}
return response;
}
public async Task UpdatePartAsync(部分,字符串post\u url)
{
字符串jsonString=JsonConvert.SerializeObject(部分);
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“应用程序/json”);
var response=wait client.PostAsync(“invcount/”+post_url,新的StringContent(jsonString,Encoding.UTF8,“application/json”);
if(response.StatusCode==HttpStatusCode.NotFound)
{…//希望在此处显示“库存不足”}
返回响应;
}
你的问题与Xamarin无关。在本例中,Xamarin应用程序只是一个使用API的前端
一般来说,您应该概括您的错误响应,如果需要,将异常记录到DB以进行进一步分析。JSON示例:
{
"Code": 1000,
"Description": "Human readable description",
"Id": "6a154fd3-4142-4a9c-80b5-c635e84123fa"
}
code
用于系统中的内部错误代码,以及Id
用于识别数据库中的堆栈跟踪。因此,您的最终用户将获得一个良好的人类可读的描述和一个Id
,他可以用来联系支持人员
从技术上讲,使用ExceptionFilterAttribute
捕获并向客户端返回一般错误响应。阅读也可以给你一个更好的概述
在客户端应用程序中,从API获得响应后,您可以检查响应是否具有成功状态代码:
if (!response.IsSuccessStatusCode)
{
// Deserialize error message
}
注意:Stackoverflow不是一种编码服务,因此没有完整的示例。希望你能从我的回答中得到一些关于如何更好地处理它的想法
祝你好运 即使API调用不成功,也可以使用
HttpResponseMessage.Content.ReadAsStringAsync()
注意,HttpResponseMessage.Content
在某些情况下可能为空
if (response.StatusCode == HttpStatusCode.NotFound)
{
// Would like to display "Not enough Inventory" in here}
var resposeContent = response.Content?.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ServerResponse>(resposeContent);
// this guy will have your human-readable description or in your case, you can display the whole `result` string
Debug.WriteLine(result.Description);
}
public class ServerResponse
{
public string Code {get;set;}
public string Description {get;set;}
}