c# - 我应该在 catch 中返回什么 value?

我刚刚在我的代码中实现了一个 Try catch,错误是因为我必须在 catch 中返回一些东西,我无法理解“我应该返回什么?”

'CompanyController.Create(DtoCompany)':并非所有代码路径都返回 value [API]

[HttpPost("create/")]
public async Task<ActionResult> Create([FromBody] DtoCompany dto_company)
{
    try
    {
        var query = context.Companies.FirstOrDefault(x => x.rnc == dto_company.rnc);

        if (query != null)
        {
            Company comp = mapper.Map<Company>(query);
            context.Add(comp);
            await context.SaveChangesAsync();
            return Ok("Registro de compania exitoso");
        }
        else
        {
            return BadRequest($"Ya existe una compañia con este RNC: `{dto_company.rnc}`");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error From Company-Create:", ex.Message);
    }
}

如果我写 return 这个,我会得到另一个错误:

catch (Exception ex)
{
    return Console.WriteLine("Error From Company-Create:", ex.Message);
}

无法将类型“void”隐式转换为“Microsoft.AspNetCore.Mvc.ActionResult”[API]

回答1

您应该返回一个错误,告诉您的客户出了什么问题。一个好的方法是返回 Problem()

https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-6.0

回答2

'CompanyController.Create(DtoCompany)':并非所有代码路径都返回一个value [API]

我不明白的是“我应该返回什么?”

如果在 try 块中已经有一个 return 语句,您可以将另一个 return 放在函数的末尾,这是为了避免在需要处理多个异常时多次返回:

try
{
    //somecode
    return Ok();
}
catch(Exception ex)
{
    Console.WriteLine("Error From Company-Create:", ex.Message);
}
return BadRequest();// add  this code

回答3

您不应该从 catch 部分返回您在第一个块中实现的 MessageBox Console.WriteLine 的任何内容...简单的 try catch 语句是要求编译器执行某些操作以及是否发生任何错误代码只需捕获它并使用 MessageBox Console.WriteLine 显示给我

例子:

try 
{
  sqlConnection conn = new sqlConnection(connection_string);
  conn.Open();
} 
catch (Exception ex)
{
 if (ex.Message == "Certain specific error")
  MessageBox.Show("Do not do it");
else
  MessageBox.Show("Please do not do it");

相似文章

随机推荐

最新文章