我编写了一个可以优雅地处理大多数异常的应用程序,页面的设计完好无损,并带有漂亮的错误消息。我的应用程序在事件中捕获了它们,Page_Error
并将异常添加到页面HttpContext.Curent.Context.Items
,然后执行Server.Transfer
到Error.aspx
页面。我发现这是 ASP.NET 中唯一可行的解决方案,因为似乎没有其他方法可以以集中和通用的方式进行。
我也处理了Application_Error
,在那里我对发生的异常进行了一些检查,以确定我是否可以优雅地处理它。我发现我可以优雅地处理的异常是在有人破解 URI 以包含 .NET 框架认为危险的字符或在文件系统级别基本上只是非法的字符之后引发的。
此类 URI 可能如下所示:
http://exmample.com/"illegal"
http://example.com/illegal"/
http://example.com/illegal /
(注意最后一个 URI 末尾斜杠前的空格)。
我希望这些 URI 以“404 Not Found”和友好消息进行响应,并且不会导致发送任何错误报告以避免 DDOS 攻击向量等。但是,我还没有找到一种优雅的方法来捕获这些类型的错误。我现在要做的是检查该exception.TargetSite.Name
属性,如果它等于或CheckInvalidPathChars
,我认为它是“路径验证异常”并以 404 响应。ValidatePath
CheckSuspiciousPhysicalPath
不过,这似乎是一个 hack。首先,方法名称列表可能不完整,其次,这些方法名称有可能被替换或重命名,这将导致我的代码中断。
有谁知道我如何处理这种更少硬编码和更面向未来的方式?
PS:我System.Web.Routing
在我的应用程序中使用干净和合理的 URI,如果这对任何给定的解决方案都很重要的话。