gpt4 book ai didi

c# - 使用 ASP.net 核心(API Controller )处理基础 Controller 中的异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:38 25 4
gpt4 key购买 nike

我们当前的许多 Controller 看起来像这样:

[HttpPost]
public List<Foo> Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}

try
{
// business logic
}
catch (Exception ex)
{
// logging
}

return dto;
}

虽然这里重复了很多代码。我想做的是实现一个处理异常的基本 Controller ,这样我就可以返回一个标准化响应,其中包含 PayloadSuccess错误

在 .net core 之前,这可以通过提供 OnException 的覆盖来实现,但这似乎不适用于 .net core api Controller 。当我的 Controller 主体出现问题时,我该如何整合此异常逻辑以返回自定义响应?

我喜欢这样,作为起点:

[HttpPost]
public StandardFoo Post([FromBody]Bar model)
{
if (model == null)
{
throw new ArgumentNullException();
}

// business logic

return new StandardFoo(){Payload: dto};
}

模型验证或 业务逻辑 抛出的异常会冒泡到某个逻辑片段,该逻辑片段返回一个新的 StandardFoo,其属性包含异常详细信息。

最佳答案

如果很快,您不应该在 Controller 中捕获和处理异常。


相反,您需要在代码中分离正常流和错误流,然后分别处理错误流。指示正常流程不可能的主要方法之一是引发 .NET 异常(并且您使用它)。但是:

  • Controller 操作应该只知道正常流。没有 try-catch 逻辑等等。
  • 对于输入验证,使用 ActionFilter。您可以为所有 Controller 设置全局过滤器或为每个操作定义特定的过滤器。参见 Filters section在文档中。 ASP.NET Core 也允许做 Model Validation .

  • 在 Controller 操作执行期间,您应该尽快引发异常并停止进一步的管道执行。是的,可以在任何级别(操作级别、服务/业务层、​​DA 层等)上引发异常。

如何处理抛出的异常?

  • 使用 ASP.NET Core 提供的错误处理方法(如 ExceptionHandler 或异常过滤器),它允许分析异常并相应地生成适当/不同的响应。查看相关SO Error handling in ASP.NET Core这个例子的问题。还有 error-handling section在文档中。

关于c# - 使用 ASP.net 核心(API Controller )处理基础 Controller 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com