Pra*_*bhu 5 .net c# asp.net asp.net-mvc exception
在我的ASP.NET MVC应用程序中,我不想向用户报告所有异常消息.但是我想向用户报告某些类型的异常,因此我创建了一个动作过滤器来判断它是否是这种特殊类型的异常,如果是,则显示异常消息,否则显示通用消息.所以我创建了一个名为ClientException的自定义异常.
我的过滤器看起来像这样:
if (filterContext.Exception is ClientException)
message = filterContext.Exception.Message.Replace("\r", " ").Replace("\n", " ");
else
message = "An error occured while attemting to perform the last action. Sorry for the inconvenience.";
filterContext.HttpContext.Response.Status = "500 " + message;
Run Code Online (Sandbox Code Playgroud)
我读了这篇http://blogs.msdn.com/b/kcwalina/archive/2007/01/30/exceptionhierarchies.aspx,其中作者建议使用现有的.NET异常类型来报告使用错误.但是,通过引入我的自定义异常,我只需要在我的过滤器中进行一次检查.我的方法好吗?
我喜欢这种方法有几个原因。
首先,它安全地失败。如果有人没有明确抛出 ClientException,则不会报告异常详细信息。忘记显示某些内容比意外显示某些内容的问题要小。
其次,它允许在适当的位置决定是否显示异常。例如,并非所有 IOException 都会显示。有些可能是,有些则不会。可以在调用堆栈中的任何位置捕获并转换特定的异常,以便可以在已知正确的地方进行转换。
这两件事一起意味着未来的开发人员不会不恰当地更改要显示的整个异常类,或者认为某些内容在实际显示时不会显示。
此外,使用特定异常类型的目的是确定稍后要采取什么操作来响应该异常。“向用户显示此消息”是一个非常好的指定操作。一旦做出决定,例外的确切性质就完全无关了。(当然,出于记录目的,最初的问题可能会放在 InnerException 属性中。)
所以,在我看来,这是一个很好的设计。