我正在尝试弄清楚如何从我的存储库将异常和错误返回到 Controller 级别,并能够在客户端调用我的网络服务时将自定义错误返回给他们。
我的 BookRepository 类中有以下示例:
public BookViewModel GetBookById(Guid id)
{
var Book = _Books.Collection.Find(Query.EQ("_id", id)).Single();
return Book;
}
显然我的函数会比这复杂一点,但是如果我在一个不存在的 id 上调用这个方法我会得到一个异常。我怎样才能让我的异常和自定义错误冒泡到我的 Controller ,然后在客户端响应中很好地显示
请您参考如下方法:
在异常处理方面,即使是网络服务也应该遵循与任何其他代码相同的模式。这些最佳实践包括不使用自定义异常,除非调用者要根据异常类型做出编程选择。所以,
public BookViewModel GetBookById(Guid id)
{
try
{
var Book = _Books.Collection.Find(Query.EQ("_id", id)).Single();
return Book;
}
catch (SpecificExceptionType1 ex)
{
Log.Write(ex);
throw new Exception("Some nicer message for the users to read", ex);
}
catch (SpecificExceptionType2 ex)
{
Log.Write(ex);
throw new Exception("Some nicer message for the users to read", ex);
}
catch (Exception ex)
{
Log.Write(ex);
throw; // No new exception since we have no clue what went wrong
}
}
