尝试捕捉异常

时间:2015-09-11 03:01:58

标签: c# asp.net

我想问一下我是否在使用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>");
    }

非常感谢。

2 个答案:

答案 0 :(得分:3)

这是捕获所有异常的正确语法;然而,这是一个非常糟糕的反模式。这会捕获ex并立即再次抛出它,破坏整个堆栈跟踪。如果需要重新抛出,请写入抛出;

在这种情况下,您根本不想抛出,因此空捕获可能是正确的。考虑返回更多关于出错的信息,这需要将错误返回放在catch子句本身。

答案 1 :(得分:1)

唯一的区别是后者会在

中捕获任何异常
if (ModelState.IsValid)

线。除非你认为该行实际上抛出一个异常,否则它们是相同的。

您可能还想考虑更多关于为异常构建这么宽的网络(即缩小您想要处理的实际异常)。我们的想法是处理你能做的事情,并让其他一切通过,以便上层处理。

此外,重新抛出例外情况最好由throw本身而不是throw ex完成。前者保留了后者将失去的信息。

但是,由于除了将树传递给树之外,你实际上并没有任何事情,所以首先要抓住它是没有意义的。只需执行命令,如果你得到一个异常,一个更高级别的异常处理程序应该处理它没有你搞乱try..catch