gpt4 book ai didi

c# - 最佳实践的全局结果-Asp.Net Core 3和Angular 9中的错误处理

转载 作者:行者123 更新时间:2023-12-03 09:12:42 25 4
gpt4 key购买 nike

根据Microsoft的建议,不应将throw和catch用作程序的常规逻辑。
Minimize exceptions

作为ASP.Net核心清洁体系结构项目(具有3层通用存储库-BL服务- Controller )的一部分,应如何设计和实现错误处理和结果?
是否应将结构或全局结果类用于所有Api Controller 和BL服务?
如果错误和结果封装在结构中就足够了吗?

WebApi项目中结果类的示例:

public class ExampleResult<T> 
{
public ExampleResult(T value, string message, bool success)
{
(...)
}
}

Controller :
public ActionResult<ExampleResult<NewResourceDto>> Post([FromBody] NewResourceDto myNewResource)
{
try
{
if(!Validate(myNewResource))
return new ExampleResult(null, "some business logic validate failed", true);

ExampleResult result = _service.TrySaveMyNewResource(myNewResource);
return result;
}
catch (Exception ex)
{
// Log the exception here...
return new ExampleResult(null, "some message" + ex, false);
}
}

然后,Angular Client会验证该值是否为null和/或成功是true还是false。
该消息包含错误消息。
http状态将为200(无论成功与否)。

如何优雅地最小化异常(exception)?

最佳答案

我同意,不应将抛出异常用作系统中的信号。也许我不明白您关于返回结构体或全局结果类的问题。似乎是个坏主意。特别是,如果出现问题,请不要返回HTTP OK 200。

  • 保持Web API Controller 尽可能的薄和愚蠢
  • 将Web API Controller 方法方法包装在try-catch中,以便始终在意外错误
  • 上返回HTTP Internal Server Error 500

    Controller 方法示例:
    public IActionResult Post([FromBody] NewResourceDto myNewResource)
    {
    try
    {
    _service.TrySaveMyNewResource(myNewResource);

    return StatusCode(201);
    }
    catch (Exception ex)
    {
    // Log the exception here...
    return StatusCode(500);
    }
    }

    关于c# - 最佳实践的全局结果-Asp.Net Core 3和Angular 9中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61978405/

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