gpt4 book ai didi

c# - 从 .NET Core API 返回有意义的错误消息

转载 作者:行者123 更新时间:2023-12-03 07:41:30 26 4
gpt4 key购买 nike

场景

我有一个带有异常处理中间件的 .NET Core 2.2 Web API。每当应用程序(在 MVC 层内)发生异常时,它都会被异常中间件捕获并作为内部服务器错误返回到前端并记录到 kibana。

问题

当出现问题时这一切都很好,但有时我想通知调用应用程序具体出了什么问题。即,“无法在数据库中找到记录!”或“无法将这个转换成那个!”

我的解决方案

我已经使用应用程序异常(不是很好 - 我知道)来搭载错误中间件以将其返回到前端。这一直运行良好,但由于不得不抛出一大堆异常而在代码周围产生了很多噪音。我对这种方法不满意,并且坚信必须有更好的解决方案。

我的应用程序架构:我遵循传统的 n-tier application布局是服务(业务逻辑)和存储库(DAL)都在互相交谈。我更愿意在这些层中的任何一层优雅地将任何问题反馈给用户。

我已经考虑这个问题一段时间了,但不确定最好的解决方法是什么。任何建议将不胜感激。

最佳答案

我使用了一种操作结果模式(非官方模式)。

原理是返回一个新的Type,包含:

  • 手术是否成功。
  • 操作成功的结果。
  • 有关导致失败的异常的详细信息。

考虑以下类:

public class OperationResult
{
protected OperationResult()
{
this.Success = true;
}

protected OperationResult(string message)
{
this.Success = false;
this.FailureMessage = message;
}

protected OperationResult(Exception ex)
{
this.Success = false;
this.Exception = ex;
}

public bool Success { get; protected set; }
public string FailureMessage { get; protected set; }
public Exception Exception { get; protected set; }

public static OperationResult SuccessResult()
{
return new OperationResult();
}

public static OperationResult FailureResult(string message)
{
return new OperationResult(message);
}

public static OperationResult ExceptionResult(Exception ex)
{
return new OperationResult(ex);
}

public bool IsException()
{
return this.Exception != null;
}
}

然后您可以轻松地调整 OperationResult 或创建一个继承自 OperationResult 的类,但使用泛型类型参数。

一些例子:

  1. The Operation Result Pattern — A Simple Guide
  2. Error Handling in SOLID C# .NET – The Operation Result Approach

关于c# - 从 .NET Core API 返回有意义的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55262168/

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