我们目前的许多控制器是这样的:处理异常
[HttpPost]
public List<Foo> Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}
try
{
// business logic
}
catch (Exception ex)
{
// logging
}
return dto;
}
大量的代码正在这里虽然重复。我想要做的是实现一个基本的控制器来处理异常,所以我可以返回标准化反应与Error
像Payload
领域,Success
,等
此前.NET的核心,这是可以通过提供覆盖OnException
但是,这似乎不适用于.net核心API控制器。当我的控制器主体发生错误时,如何合并此异常逻辑以返回自定义响应?
我想此,作为起点:
[HttpPost]
public StandardFoo Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}
// business logic
return new StandardFoo(){Payload: dto};
}
凡异常,由模型验证或business logic
冒泡一些的逻辑块与包含异常细节的属性返回一个新StandardFoo
抛出。
documentation:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling – Nkosi
您正在关注错误的方法。你应该避免使用基于控制器的异常处理方法,以及控制器中的try catch。应尽可能保持管理者的精益,并将责任合并到另一个班级中。这似乎是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – Nkosi
@Nkosi你能否提供一个简单而简洁的例子,说明如何在抛出异常时使用上述控制器并返回自定义响应? – user666