尝试Catch,ModelState.IsValid或Both?

时间:2015-06-04 12:25:20

标签: asp.net-mvc controller try-catch modelstate

我想知道,在基本CRUD操作中测试有效性和错误的最佳方法是什么?

当我第一次使用脚手架MVC控制器时,他们有类似的东西:

if (ModelState.IsValid)
{
    // do stuff
    return View("SuccessfulView")
}
// if we got this far something went wrong, redisplay
return View()

但现在我得到这样的东西:

try
{
    // do stuff
    return RedirectToAction("SuccessfulView");
}
catch
{
    return View();
}

测试ModelState与测试异常不同,所以我很想把它们放在一起。

但后来我想知道为什么MS在他们更新脚手架代码时没有放入两者(毫无疑问他们这样做是有原因的)。

另外,每一个基本动作都开始变得非常复杂:

if (ModelState.IsValid)
{
    try
    {
        // do stuff
        return RedirectToAction("SuccessfulView");
    }
    catch
    {
        return View();
    }
}
// if we got this far something went wrong, redisplay
return View()

2 个答案:

答案 0 :(得分:2)

ModelState - 使用您应用的数据注释验证ViewModel。

TryCatch - 将捕获代码中可能出现的任何异常。

我说 BOTH!

这是怎么回事,

if (ModelState.IsValid)
{
    try
    {
        // do stuff
        return View();
    }
    catch(Exception ex) // catches all exceptions
    {
        return View(ex.Message);
    }
}
ModelState.AddModelError("", "Error");
return View(model);

答案 1 :(得分:1)

我认为MS在脚手架中不包含try / catch的原因是因为已经有其他机制来处理异常。有关Asp.NET MVC中可用的6种不同选项的列表,请参阅this。 MS可能不想规定具体的方法,并打算让实施者为他们自己选择一种方法。