Application_Errorexception处理,重定向无限循环和CSS加载问题

我在globals.asax文件的Application_Error事件中有error handling。 在这个事件中,我正在使用Response.Redirect(~errorview.aspx)方法,用于重定向到能够以用户友好的方式处理错误的站点。

除非Application_Start事件中出现exception,否则一切正常。 当那里发生错误时,我的应用程序陷入无限循环,反复点击Application_Error方法。 更重要的是,我正在重定向的页面永远不会被击中。 将Response.Redirect(~errorview.aspx)方法更改为Response.Redirect(~errorview.aspx, false)不会更改任何内容。

好消息是,当Response.Redirect(~errorview.aspx)已被Server.Transfer(~errorview.aspx)替换Server.Transfer(~errorview.aspx) ,errorview.aspx页面成功命中。

副作用现在不加载CSS,errorview.aspx页面看起来很难看。 更重要的是, 只有Application_Start事件中发生exception时才会加载CSS。 从任何其他地方抛出的exception不会使CSS变得混乱。

我如何以正确的方式处理这个问题,以及为什么在特定情况下缺少CSS? 在我的情况下处理错误的适当方法是什么?

UPDATE

对于CSS加载,我使用这个:

  

我正在转移的错误页面: http://localhost/APP/Pages/Module/Pages/ErrorView.aspx

css文件夹路径: http://localhost/APP/Pages/Module/CSS/Layout/style.css

提前感谢任何线索。 问候。

如果您在Application_Start期间遇到exception,则比在错误页面中尝试加载CSS有更大的问题。 Application_Start旨在作为Web站点的引导程序来初始化所有内容。 如果无法成功初始化应用程序,则可能无法为任何请求提供服务。 (当知道Application_Start中存在exception时,您不应该将应用程序发布到生产环境。)

最终,Server.Transfer正在做的只是从处理当前路径切换到处理新路径。 请求上下文未被修改,因此新路径中的任何相对引用都与原始请求相关。 如果Application_Start中发生exception,则没有原始请求。 (请求不是由Application_Start处理的。请求可以调用Application_Start,但它不会知道有关请求的任何信息。)这可能是因为Application_Startexception的Server.Transfer没有加载CSS的原因 – 没有原始的请求上下文。

此外,拥有一个静态的仅HTML错误页面通常是一个更好的主意。 如果IIS中的某些ASP.NET处理导致错误,那么由ASP.NET处理的错误页面可能会遇到相同的错误,可能导致无限循环(错误页面重定向到错误页面)因为有错误 – 泡沫,冲洗,重复)。 (这是您遇到的无限循环情况。)最终,优秀的浏览器会注意到这一点并停止循环,但您仍然有失控的请求周期。 如果您使用静态html专用页面,则可以阻止ASP.NET尝试处理请求。 (它通常也更干净,因为您应该有一个非常简单,直接的错误页面,向访问者显示并在幕后处理所有错误捕获和通知。)