Вы бы вернули IActionResult.Я настоятельно рекомендую сделать это асинхронно.Вот как вы можете вернуть что-нибудь через метод контроллера:
[Route("api/{controller}")]
public class ProductsController : Controller
{
[HttpGet]
public async Task<IActionResult> GetProducts()
{
var products = DataAccess.GetProductsFromDb();
if (products is null)
{
return Ok(products);
}
else
{
return NotFound("Item not found!");
}
}
}
Обратите внимание, что Ok
и NotFound
являются методами в абстрактном классе Controller
, который позволяет вам возвращать любой объект, который вы хотите, или нетобъект вообще.
Я настоятельно рекомендую, прежде чем продолжать использовать ядро .net, взгляните на пример шаблона проекта в Visual Studio или, если вы разрабатываете в другой среде IDE, запустите dotnet new mvc
в своем терминале.
Если вы хотите обработать исключение, вы должны обработать его на самом низком уровне.Предполагая, что GetProductsFromDb () является самым низким уровнем, и у вас нет сервисного уровня (вы будете сожалеть об этом выборе дизайна в производстве!), Вы бы попробовали / поймали.
[Route("api/{controller}")]
public class ProductsController : Controller
{
[HttpGet]
public async Task<IActionResult> GetProducts()
{
Products[] products;
try
{
products = DataAccess.GetProductsFromDb();
}
catch(Exception e)
{
Log.Error(e, "Unable to receive products");
return InternalServerError("Unable to retrieve products, please try again later");
}
if (products is null)
{
return BadRequest("Error retrieving products list");
}
else
{
return Ok(products);
}
}
}
Скорость НЕ важнее стабильностив большинстве случаев, и, конечно, не на этой стадии развития.стоимость получения исключения незначительна для чего-то такого высокого уровня.