0

有没有办法在 IIS 7 中设置自定义错误页面而不创建 web.config?

不幸的是,研究这个特定主题非常困难,因为有很多关于如何使用 web.config 进行研究的文章。我正在寻找的东西要么隐藏在我不想要的 800 万个结果之下,要么是不可能的。

4

2 回答 2

1

就在这里。它涉及订阅Application_Error事件Global.asax或通过编写 custom ErrorHandlerAttribute

于 2012-07-18T13:32:56.033 回答
1

达林已经给出了正确的答案,但我想更深入一点。

在任何 ASP.NET 应用程序中,如果它是 Web 窗体、MVC 或原始 ASP.NET,您始终可以使用Application_ErrorGlobal.asax。如果您的 ASP.NET 应用程序没有 Global.asax,您只需在解决方案资源管理器中右键单击您的项目,添加新项,然后选择全局应用程序类。如果您还没有此选项,则应该只提供此选项。 添加新的全局应用程序类

在您的 Global.asax 中,如果您还没有看到它,您可以添加Application_Error如下所示:

protected void Application_Error(object sender, EventArgs e) {

}

每当出现错误时,ASP.NET 都会自动调用它。但正如这里所说,这并不完美。具体来说:

Global.asax 文件中定义的错误处理程序将仅捕获在 ASP.NET 运行时处理请求期间发生的错误。例如,如果用户请求在您的应用程序中没有出现的 .aspx 文件,它将捕获错误。但是,如果用户请求不存在的 .htm 文件,它不会捕获错误。对于非 ASP.NET 错误,您可以在 Internet 信息服务 (IIS) 中创建自定义处理程序。服务器级错误也不会调用自定义处理程序

Application_Error您可以使用 处理未捕获的异常Server.GetLastError()。这将为您提供Exception被抛出的,或null. 我不确定如果没有发生异常,为什么会调用这个处理程序,但我相信这是可能的。

要重定向用户,请使用Response.Redirect(). 无论您传递什么,url都将直接发送到浏览器而无需任何进一步处理,因此您不能使用应用程序相对路径。为此,我会将此方法与VirtualPathUtility.ToAbsolute(). 例如:

Response.Redirect( VirtualPathUtility.ToAbsolute( "~/Error.aspx" ) );

此重定向将是 302(临时重定向)而不是 301(永久),这是您在处理错误时想要的。值得注意的是,这个重载Response.Redirect与调用重载是一样的Response.Redirect(url, endResponse: true)。此方法通过抛出异常来工作,这在性能方面并不理想。相反, callResponse.Redirect(url, false)紧接着是Response.Complete​Request().

如果您使用的是 ASP.NET MVC,[HandleError]也是一种选择。将此属性放置在您的控制器上或控制器内的操作上。当此属性存在时,MVC 将显示错误视图,该视图位于 ~/Views/Shared 文件夹中。

但是你可以让这对你自己更容易。FilterConfig您可以通过在您的项目中创建一个类来自动添加此属性以在您的项目中调用 Controllers 。例子:

public class FilterConfig {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
        filters.Add(new HandleErrorAttribute());
    }
}

然后添加FilterConfig.RegisterGlobalFilters( GlobalFilters.Filters );到您Application_Start()的 Global.asax 中。

您可以HandleErrorAttributehttps://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute(v=vs.118).aspx了解更多信息。

但是如上所述,这两种方法都不会绝对涵盖在处理您的应用程序期间可能发生的所有错误。如果不使用 Web.config 或手动配置 IIS,就不可能为所有可能的错误提供最佳用户体验。

于 2017-07-08T14:05:48.643 回答