c# - 从 .NET Core API 返回有意义的错误消息
问题描述
设想
我有一个带有异常处理中间件的 .NET Core 2.2 Web API。每当应用程序(在 MVC 层内)发生异常时,它就会被异常中间件捕获并作为内部服务器错误返回到前端并记录到 kibana。
问题
当出现问题时,这一切都很好,但有时我想具体通知调用应用程序出了什么问题。即,“在数据库中找不到记录!” 或“无法将这个转换成那个!”
我的解决方案
我已经使用应用程序异常(不是很好 - 我知道)来捎带错误中间件以将其返回到前端。这一直工作得很好,但是由于不得不抛出一大堆异常而在代码周围产生了很多噪音。我对这种方法不满意,并坚信必须有更好的解决方案。
我的应用程序架构:我遵循传统的n 层应用程序布局,即服务(业务逻辑)和存储库(DAL)都相互通信。我希望在任何这些层中优雅地将任何问题反馈给用户。
我一直在考虑这个问题,但不确定最好的方法是什么。任何意见,将不胜感激。
解决方案
我使用了一种运算结果模式(非官方模式)。
原理是返回一个新的类型,其中包含:
- 手术是否成功。
- 操作成功的结果。
- 有关导致失败的异常的详细信息。
考虑以下类:
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 的类,但使用泛型类型参数。
一些例子:
推荐阅读
- vb.net - 如何将 vb.net 表单自动适应任何屏幕分辨率?
- c# - 如何将操作应用于对象?
- linux - 无法在 Jupyter-notebook 中访问我的主树
- java - Oracle Mobile Hub 与 Oracle 云数据库 (ADW)
- powershell - Powershell 似乎无法通过 telgram API 的 Invoke Webrequest 下载文件
- dataframe - Julia - 以另一个数据框中的列为条件选择数据框的子集
- command - 使用 popen 或 ShellExecute 以编程方式从命令提示符获取 winget 输出,不工作
- r - 更改条形图上的 x 和 y 标签
- r - 允许滚动越过闪亮仪表板的底部
- javascript - 如何对 json 元素进行分组以进行交换