Skip to main content
 首页 » 编程设计

c#之在 Web API 中从存储库级别返回错误的好方法

2024年02月20日32jackei

我正在尝试弄清楚如何从我的存储库将异常和错误返回到 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 
    } 
}