C# 应用程序错误异常处理、重定向无限循环和CSS加载问题

C# 应用程序错误异常处理、重定向无限循环和CSS加载问题,c#,asp.net,error-handling,C#,Asp.net,Error Handling,我在globals.asax文件的应用程序_错误事件中有错误处理。在这个事件中,我使用Response.Redirect(~errorview.aspx)方法重定向到能够以用户友好的方式处理错误的站点 一切正常,除非应用程序启动事件中出现异常。当那里发生错误时,我的应用程序被困在无限循环中,应用程序错误方法被反复命中。更重要的是,我重定向到的页面永远不会被点击。将Response.Redirect(~errorview.aspx)方法更改为Response.Redirect(~errorview

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

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

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

现在的副作用是不加载CSS,errorview.aspx页面看起来很难看。更重要的是,当应用程序启动事件中发生异常时,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


谢谢你提前提供线索。注意。

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

最终,Server.Transfer所做的只是从处理当前路径切换到处理新路径。不会修改请求上下文,因此新路径中的任何相对引用都是相对于原始请求的。如果应用程序启动时发生异常,则没有原始请求。(请求不由应用程序_Start处理。请求可能会导致调用应用程序_Start,但它不知道有关该请求的任何信息。)这可能就是服务器的原因。从应用程序_Start异常传输不会加载CSS-没有原始请求上下文


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

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

最终,Server.Transfer所做的只是从处理当前路径切换到处理新路径。不会修改请求上下文,因此新路径中的任何相对引用都是相对于原始请求的。如果应用程序启动时发生异常,则没有原始请求。(请求不由应用程序_Start处理。请求可能会导致调用应用程序_Start,但它不知道有关该请求的任何信息。)这可能就是服务器的原因。从应用程序_Start异常传输不会加载CSS-没有原始请求上下文


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

我想补充一点——乍一看可能会造成混乱。使用Server.Transfer时,它不会启动新响应。如果您已经向响应写入了任何内容(例如,如果错误发生在生成页面输出的中途),那么您将在该上下文中呈现新页面。如果您想确保您的错误页面是唯一的rend