繁体   English   中英

没有Web.config的IIS 7自定义错误页面

[英]IIS 7 Custom Error Page without Web.config

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

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

就在这里。 它涉及订阅Global.asaxApplication_Error事件或编写自定义的ErrorHandlerAttribute

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

在任何ASP.NET应用程序中,如果它是Web窗体,MVC或原始ASP.NET,您始终可以使用Application_Error Global.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文件,它不会捕获错误 对于nonASP.NET错误,您可以在Internet信息服务(IIS)中创建自定义处理程序。 也不会为服务器级错误调用自定义处理程序

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

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

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

此重定向将是302(临时重定向)而不是301(永久重定向),这是处理错误时所需的。 值得注意的是, Response.Redirect这个重载与调用重载Response.Redirect(url, endResponse: true) 此方法通过抛出异常来工作,这在性能方面并不理想。 而是立即调用Response.Redirect(url, false) ,然后调用Response.Redirect(url, false) Response.Complete​Request()

如果您使用的是ASP.NET MVC, [HandleError]也是一个选项。 将此属性放在Controller上或控制器中的Action上。 当此属性存在时,MVC将显示在〜/ Views / Shared文件夹中找到的Error视图。

但是你可以让自己更容易。 您可以通过在项目中创建FilterConfig类来自动添加此属性以调用项目中的控制器。 例:

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

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

您可以在https://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute(v=vs.118).aspx上阅读有关HandleErrorAttribute更多信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM