如何处理Web API 2.方法中的异常?

时间:2014-06-22 09:51:31

标签: asp.net asp.net-mvc asp.net-web-api

在我的WebAPI 2.1应用程序中,我正在处理这样的插入:

    [Route("Post")]
    public async Task<IHttpActionResult> Post([FromBody]City city)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        try
        {
            db.Exams.Add(city);
            await db.SaveChangesAsync(User, DateTime.UtcNow);
        }
        catch (Exception ex)
        {
            var e = ex;
            return BadRequest("Error: City not created");
        }
        return Ok(city);
    }

我使用类似的更新和删除。我想我应该做一些更有意义的事情 例外,但我不知道从哪里开始如何处理这些。我看着elmah,但它说它涉及未处理的异常。这是否意味着我不应该抓住这样的例外?

有人可以给我一些 关于我拥有什么是好的指针以及我应该记录异常以及如何记录?

1 个答案:

答案 0 :(得分:3)

你正在做的事情不是&#34;糟糕&#34;它只是有点冗长,如果你的代码中有很多try / catch块,它就不会很好地扩展。当引发异常时,您决定该怎么做,如果它真的是一个糟糕的请求,则返回一个错误的请求响应就可以了。根据出了什么问题,你可以返回很多东西。但是,当你的代码抛出异常时,你必须处理该怎么做,所以在你的代码中保持这种逻辑分散很快就会成为一个问题。

利用asp.net web api的异常处理框架会更好。例如,看看这些文章:

我们的想法是将您的逻辑集中在一个全局异常处理程序中,并将其用作代码中唯一需要担心的地方。其余的代码将抛出异常,一切都将通过你的异常处理程序/过滤器等进行,具体取决于你的决定。

例如,我创建了自己的异常类型(例如CustomExceptionA,CustomExceptionB等),当我抛出一个类型的异常时,我确切知道如何在一个地方处理它并执行一些逻辑。如果我想改变处理特定异常类型的方式,那么我只有一个地方需要进行更改,其余的代码将不受影响。

上面的第二篇文章链接还包括一个记录此类异常的全局异常记录器。