我想问一下我是否在使用asp.net中的try和catch时获得了正确的语法
我的代码是这样的:
public ActionResult Add_RefPerson(rms_referred_person ref_person)
{
if (ModelState.IsValid) {
try
{
ref_person.rf_referreddate = Date();
ref_person.rf_createdby = getBadge();
ref_person.rf_updatedby = null;
ref_person.rf_updateddate = null;
ref_person.rf_isactive = true;
db.rms_referred_person.Add(ref_person);
db.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception ex) {
throw ex;
}
}
return Content("<script type='text/javascript'>alert('Cannot be saved');</script>");
}
我尝试并抓住正确的方向吗? 或者我应该使用这个。
public ActionResult Add_RefPerson(rms_referred_person ref_person)
{
try
{
if (ModelState.IsValid) {
ref_person.rf_referreddate = Date();
ref_person.rf_createdby = getBadge();
ref_person.rf_updatedby = null;
ref_person.rf_updateddate = null;
ref_person.rf_isactive = true;
db.rms_referred_person.Add(ref_person);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (Exception ex) {
throw ex;
}
return Content("<script type='text/javascript'>alert('Cannot be saved');</script>");
}
非常感谢。
答案 0 :(得分:3)
这是捕获所有异常的正确语法;然而,这是一个非常糟糕的反模式。这会捕获ex并立即再次抛出它,破坏整个堆栈跟踪。如果需要重新抛出,请写入抛出;
在这种情况下,您根本不想抛出,因此空捕获可能是正确的。考虑返回更多关于出错的信息,这需要将错误返回放在catch子句本身。
答案 1 :(得分:1)
唯一的区别是后者会在
中捕获任何异常if (ModelState.IsValid)
线。除非你认为该行实际上抛出一个异常,否则它们是相同的。
您可能还想考虑更多关于为异常构建这么宽的网络(即缩小您想要处理的实际异常)。我们的想法是处理你能做的事情,并让其他一切通过,以便上层处理。
此外,重新抛出例外情况最好由throw
本身而不是throw ex
完成。前者保留了后者将失去的信息。
但是,由于除了将树传递给树之外,你实际上并没有做任何事情,所以首先要抓住它是没有意义的。只需执行命令,如果你得到一个异常,一个更高级别的异常处理程序应该处理它没有你搞乱try..catch
。