我应该 return 捕获什么值?

What value should I return in catch?

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

'CompanyController.Create(DtoCompany)': not all code paths return a 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);
}

Cannot implicitly convert type 'void' to 'Microsoft.AspNetCore.Mvc.ActionResult' [API]

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

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

你不应该 return 来自 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");

'CompanyController.Create(DtoCompany)': not all code paths return a value [API]

I can't understand is "what should I return?"

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

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