Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Xamarin返回错误消息REST API_C#_Android_Rest_Xamarin - Fatal编程技术网

C# 使用Xamarin返回错误消息REST 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

我正在开发(至少正在尝试…)一个XamarinAndroid应用程序,并连接到API。下面是一个基本的例子,我试图做什么与一个职位。我不知道如何将错误消息(不仅仅是代码)返回给客户端?只要能提供一个完整的例子,我愿意找到更好的方法

API代码:

[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;}
}