在我的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,但它说它涉及未处理的异常。这是否意味着我不应该抓住这样的例外?
有人可以给我一些 关于我拥有什么是好的指针以及我应该记录异常以及如何记录?
答案 0 :(得分:3)
你正在做的事情不是&#34;糟糕&#34;它只是有点冗长,如果你的代码中有很多try / catch块,它就不会很好地扩展。当引发异常时,您决定该怎么做,如果它真的是一个糟糕的请求,则返回一个错误的请求响应就可以了。根据出了什么问题,你可以返回很多东西。但是,当你的代码抛出异常时,你必须处理该怎么做,所以在你的代码中保持这种逻辑分散很快就会成为一个问题。
利用asp.net web api的异常处理框架会更好。例如,看看这些文章:
我们的想法是将您的逻辑集中在一个全局异常处理程序中,并将其用作代码中唯一需要担心的地方。其余的代码将抛出异常,一切都将通过你的异常处理程序/过滤器等进行,具体取决于你的决定。
例如,我创建了自己的异常类型(例如CustomExceptionA,CustomExceptionB等),当我抛出一个类型的异常时,我确切知道如何在一个地方处理它并执行一些逻辑。如果我想改变处理特定异常类型的方式,那么我只有一个地方需要进行更改,其余的代码将不受影响。
上面的第二篇文章链接还包括一个记录此类异常的全局异常记录器。