【发布时间】:2012-01-19 02:59:12
【问题描述】:
我有一个 Web 项目,它有一个名为 editemployee.aspx 的页面。后面的代码是editemployee.aspx.cs。从该代码中,我调用了另一个项目,一个类库。我在那个类库中调用的方法看起来像......
public static Employee GetItem(int employeeid)
{
try
{
Employee chosenemployee = EmployeeDB.GetItem(employeeid);
chosenemployee.EmployeeInsuranceRecord = EmployeeInsuranceRecordManager.GetItem(employeeid);
return chosenemployee;
}
catch (Exception ex)
{
if (ex is NullReferenceException)
{
//How can I return gracefully from here
//without disrupting the user experience?
}
else
{
throw ex; //if it makes it this far, it must be some other unknown error and I need an exception to be thrown for real so I can track down the bug.
}
}
}
基本上,此代码根据传递的 EmployeeID 从数据访问层获取完整的员工记录。如果异常是 NullReferenceException,则意味着伪造的 EmployeeID 不知何故通过了。在这种情况下,我希望返回到调用 .aspx.cs 页面,在此处停止整理 Employee 的过程,并显示一个 JavaScript 警报框,上面写着“提供的 EmployeeID 无效”。
所以我试着说:
if (ex is NullReferenceException)
{
Response.Write("<script>alert('"The EmployeeID supplied is not valid."')</script>");
}
但这在单独的类库中不起作用,它无法识别 Response.Write。
基本上我只需要一种方法来发出信号,通过这个方法,调用页面只是停止并优雅地显示错误,而不是给用户一个巨大的难看的不可恢复的错误消息。有什么建议吗?
【问题讨论】:
-
永远不要使用
throw ex重新引发异常,而只需使用throw。在第一种情况下,您将丢失堆栈跟踪。有关详细信息,请参阅此question。 -
你们都很棒。这将真正帮助我解决这个特定问题,并了解更多关于一般错误处理的知识:)
标签: c# asp.net exception error-handling