Mic*_*k R 1 c# asp.net-mvc asp.net-core asp.net-core-webapi
我们当前的许多控制器看起来像这样:
[HttpPost]
public List<Foo> Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}
try
{
// business logic
}
catch (Exception ex)
{
// logging
}
return dto;
}
Run Code Online (Sandbox Code Playgroud)
虽然这里重复了很多代码.我想要做的是实现一个基本的控制器来处理异常,所以我可以返回一个标准化的响应与类似领域Payload,Success,Error,等.
在.net核心之前,这可以通过提供覆盖来实现,OnException但这似乎不适用于.net核心api控制器.当我的控制器主体出现问题时,如何合并此异常逻辑以返回自定义响应?
我想这样,作为一个起点:
[HttpPost]
public StandardFoo Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}
// business logic
return new StandardFoo(){Payload: dto};
}
Run Code Online (Sandbox Code Playgroud)
如果模型验证抛出异常或business logic冒泡到某个逻辑,该逻辑返回StandardFoo带有包含异常详细信息的属性的new .
如果不久,您不应该捕获并处理控制器中的异常.
相反,您需要在代码中分离正常流和错误流,然后分别处理错误流.指示正常流程不可能的主要方法之一是提高.NET异常(并使用它).但:
try-catch逻辑等等.用于输入验证使用ActionFilter.您可能拥有所有控制器的全局过滤器或定义特定的每个操作.请参阅文档中的过滤器部分 ASP.NET Core还允许进行模型验证.
在控制器操作执行期间,您应该尽快引发异常并停止进一步的管道执行.是的,可以在任何级别(动作级别,服务/业务层,DA层等)上引发异常.
如何处理引发的异常呢?
| 归档时间: |
|
| 查看次数: |
3991 次 |
| 最近记录: |