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

标签 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

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

最佳答案

如果在Application_Start期间遇到异常,则与尝试将CS​​S加载到错误页面中相比,您会遇到更大的问题。 Application_Start旨在作为网站初始化所有内容的 bootstrap 。如果无法成功初始化应用程序,则可能无法处理任何请求。 (当已知Application_Start中仍然存在异常时,您不应将应用程序发布到生产环境中。)

最终,Server.Transfer所做的只是从处理当前路径切换到处理新路径。请求上下文未修改,因此新路径中的任何相对引用都相对于原始请求。如果Application_Start中发生异常,则没有原始请求。 (请求不是由Application_Start处理的。一个请求可能导致Application_Start被调用,但是它对请求一无所知。)这可能就是为什么Application.Start异常的Server.Transfer无法加载CSS的原因-没有原始的请求上下文。

另外,通常有一个静态的纯html错误页面是一个更好的主意。如果由于IIS中的某些ASP.NET处理导致错误,则同样由ASP.NET处理的错误页面也可能会遭受相同的错误,从而可能导致无限循环(错误页面重定向到错误页面因为有错误-泡沫,冲洗,重复)。 (这是您遇到的无限循环情况。)最终,好的浏览器会注意到这一点并停止循环,但是您仍然有失控的请求周期。如果使用仅静态的html页面,则可以防止ASP.NET尝试处理请求。 (通常,它也更干净,因为您应该有一个非常简单明了的错误页面,向访问者显示该页面,并在后台处理所有错误陷阱和通知。)

关于c# - Application_Error异常处理,重定向无限循环和CSS加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3896203/

相关文章:

c# - DAL、模型层、EF 代码优先和业务逻辑,它们如何组合在一起?

asp.net - 如何添加管理员角色(我的解决方案)

asp.net - Server.ScriptTimeout 在范围内设置全局?

error-handling - 无法模拟 MQ 原因码 2009

javascript - 错误 : [object Object] on Javascript

c# - 在 ASP.net MVC 中使用相同的 View 进行编辑和查看

C# 4.0 和 .Net 3.5

c# - WCF 服务测试

c# - 如何通过更改同一 ListView 行中下拉列表的项目来更新文本框中的文本

node.js - 如何从node.js后端获取客户端的错误对象?