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

时间:2010-10-09 15:37:06

标签: c# asp.net error-handling

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

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

好消息是,当Response.Redirect(~errorview.aspx)替换为Server.Transfer(~errorview.aspx)时,errorview.aspx页面会成功点击。

副作用现在不加载CSS,而errorview.aspx页面看起来很难看。更重要的是,当 Application_Start 事件发生异常时,CSS不会仅加载 。从任何其他地方抛出的例外不会使CSS变得混乱。

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

更新

对于CSS加载,我正在使用它:

<link href="~/Css/Layout/style.css" type="text/css" rel="stylesheet" 
      runat="server" ID="_uid" />

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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