0

提交新条目时,我在控制器中使用以下代码:

    // POST /api/Content/
    public HttpResponseMessage PostContent(Content content)
    {
        try
        {
            content.ModifiedDate = DateTime.Now;
            _uow.Contents.Add(content);
            _uow.Commit();
            var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content);
            return response;
        }
        catch (DbUpdateException ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
        } 
    }

这只会拾取 DbUpdateExceptions,所以如果有另一种异常,那么我认为我需要以不同的方式处理它。

谁能建议我应该如何处理其他异常?

4

2 回答 2

2

您可以连续添加几个捕获,从最特殊到最一般

try
{
      content.ModifiedDate = DateTime.Now;
      _uow.Contents.Add(content);
      _uow.Commit();
      var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content);
      return response;
}
catch (DbUpdateException ex)
{
     return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
} 
catch (Exception ex)
{
     // do what you want
} 
于 2013-07-28T06:40:57.810 回答
0

如果我们想从快速而肮脏的方法转移到更长但更安全的方法,我们可以通过以下步骤:

  1. 将数据访问封装在单独的对象中,并在其中处理它的异常,传递给外界自定义异常。您可以决定在单个自定义异常下隐藏所有数据访问异常。

  2. (正如@Massanu 指出的那样)连接从最特殊到最一般的处理程序。要对不同的异常做出适当的反应,不要使用单个catch (Exception ex)处理程序。

  3. 如果某些事情,实际上,让未处理,您可以通过以下Application_Error方法 捕获它:http global.asax: //msdn.microsoft.com/ru-ru/library/24395wz3 (v=vs.100).aspx

Steve Macconell 写的 Code Complete 书中有一个关于错误处理的好章节:http: //cc2e.com/

于 2013-07-28T07:07:56.077 回答