According to Microsoft's recommendation, throwing and catching should not be used for the normal logic of the program. Minimize exceptions
作为ASP.Net核心清洁体系结构项目(具有3层通用存储库-BL服务-控制器)的一部分,应如何设计和实现错误处理和结果? 是否应将结构或全局结果类用于所有Api控制器和BL服务? 如果错误和结果封装在结构中就足够了吗?
Web Api项目中的struct类的示例:
struct ExampleResult
{
public ExampleResult(T value, string message, bool success)
{
(...)
}
}
控制器:
public IActionResult Post([FromBody] NewResourceDto myNewResource)
{
try
{
if(!Validate())
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(无论成功与否)。
如何最大限度地减少例外?
我同意,不应将抛出异常用作系统中的信号。也许我不明白您关于返回结构或全局结果类的问题。似乎是个坏主意。特别是,如果出现问题,请不要返回HTTP OK 200。
控制器方法示例: