试试 Catch、ModelState.IsValid 或两者?
Try Catch, ModelState.IsValid, or Both?
我想知道,测试基本 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()
ModelState - 使用您将应用的数据注释验证您的 ViewModel。
TryCatch - 将捕获您的代码中可能发生的任何异常。
我说两个!
就是这样,
if (ModelState.IsValid)
{
try
{
// do stuff
return View();
}
catch(Exception ex) // catches all exceptions
{
return View(ex.Message);
}
}
ModelState.AddModelError("", "Error");
return View(model);
我认为 MS 不在脚手架中包含 try/catch 的原因是因为已经有其他机制来处理异常。有关 Asp.NET MVC 中可用的 6 个不同选项的列表,请参阅 this。 MS可能不想规定具体的方法,打算让实施者自己选择一个。
我想知道,测试基本 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()
ModelState - 使用您将应用的数据注释验证您的 ViewModel。
TryCatch - 将捕获您的代码中可能发生的任何异常。
我说两个!
就是这样,
if (ModelState.IsValid)
{
try
{
// do stuff
return View();
}
catch(Exception ex) // catches all exceptions
{
return View(ex.Message);
}
}
ModelState.AddModelError("", "Error");
return View(model);
我认为 MS 不在脚手架中包含 try/catch 的原因是因为已经有其他机制来处理异常。有关 Asp.NET MVC 中可用的 6 个不同选项的列表,请参阅 this。 MS可能不想规定具体的方法,打算让实施者自己选择一个。