【发布时间】:2018-12-04 14:42:01
【问题描述】:
GetProducts() 方法有以下用例。
好路径:返回产品类型数组:Product[]
错误路径:返回状态码 500 和描述性字符串错误消息。
(下面的<?Type?>是我自己的标记,用于本文的目的)
[Route("api/[controller]/[action]")]
[ApiController]
public class ProductsController : ControllerBase
{
[HttpGet]
public ActionResult<?Type?> GetProducts()
{
try
{
Product[] products = DataAccess.GetProductsFromDb();
return products;
}
catch
{
Response.StatusCode = 400;
return "Error retrieving products list"
}
}
}
有没有办法我可以声明一个泛型类型或两种类型的操作结果,以便它可以工作?
【问题讨论】:
-
使用
Product[]并在出现“错误路径”时抛出异常。内置错误处理程序将返回状态 500 和消息(您可以通过注册自己的错误处理程序进一步自定义) -
我读过抛出异常是一个更昂贵的过程,这就是我避免使用这种方法的原因。此外,我想避免潜在地泄露堆栈跟踪或任何服务器详细信息。这种方法是否足够安全?
-
这不是 Web API 的工作方式。如果没有找到产品,请返回 OK(products) 或 NotFound()。
-
如果遇到异常,正确的响应是 500 - 服务器错误。您可以使用 StatusCode() 将其返回
-
公共 IActionResult GetProducts()
标签: c# asp.net-core .net-core asp.net-core-webapi