【问题标题】:How to check if Global.asax file is being called如何检查是否正在调用 Global.asax 文件
【发布时间】:2012-02-15 19:41:42
【问题描述】:

我很难在 Global.asax 文件中执行 On_Error 事件。当应用程序出错时,它应该转到 Global.asax 文件,在数据库中记录错误并重定向到自定义错误页面。上面的代码在我的本地工作正常,但是一旦我在 DEV 机器上部署了相同的代码,Global.asax 就不会被执行。

它总是重定向到我在 web.config 中提到的客户错误页面

<customErrors mode="On" defaultRedirect="/Error_Redirect.asp">
        <error statusCode="404" redirect="/404.asp"/>
    </customErrors>

IIS 中的项目结构类似于 Test1 \ Test 2 。我正在尝试的错误处理代码在测试 2 中,它是 IIS 中的虚拟目录。如果我在 web.config 文件中有任何错误,例如“已提到的部分”,那么错误正在命中 Global.asax 文件。如果出现如下运行时错误,则不会出现在 Global.asax 文件中。

Int32 i, j, k;
i = 10;

j = 0;

k = i / j;

Response.Write(k);

。 我什至厌倦了将模式设置为 Off / RemoteOnly。 有什么建议吗??

谢谢,

【问题讨论】:

  • @Tim 我尝试了这些选项。但看起来 Global.asax 的发射是不一致的。有时它会命中 Global.asax 文件,但不是恒定的。想知道它是否与 IIS 设置有关。
  • 你不是说 Application_Error 事件吗?只有在 customErrors mode="Off" 时才会触发事件。
  • 埃里克...我也试过了。 customErrors mode="Off" ,但错误仍然没有击中 Global.asax。
  • 您是否在设置 Test 2 项目 global.asax 和 web config?

标签: .net global-asax


【解决方案1】:

您应该尝试从根目录中删除文件 precompiledapp.config。 (至少暂时重命名)

【讨论】:

    【解决方案2】:

    您的浏览器可以缓存重定向。尝试稍微修改 URL 以使其有所不同。就像在你当前的 URL 之后添加 ?something 一样,你可以确定它没有缓存在你的浏览器中。

    或者您也可以尝试在浏览器中使用 ctrl shift delete 来删除缓存。

    如果您需要确保您的全局 asax 正在运行,您可以在 global.asax 文件中的事件处理程序中使用类似的内容。

    HttpContext.Current.Response.Write("TEST");
    HttpContext.Current.Response.End();
    

    【讨论】:

      【解决方案3】:

      您的应用程序是否有可能被加载到多个 ASP.NET 进程或域中?当您使用“Test1/Test2”时,您是否认为有时您调用的 URL 会通过“Test1/Test2”,有时会通过“Test2”?

      最近,我在 ASP.NET 中处理 POC,并且错误地将 Global.asax 移动到子文件夹而不是应用程序的根目录中。我期待应用程序的启动事件中的一些代码被触发——它从未被触发。将其移回应用程序的根目录后,它开始按预期工作。

      因此,当您通过“Test2”调用时,您的 Global.asax 的异常处理程序会触发,而当您通过“Test1/Test2”调用时,您的 Global.asax 不会触发。

      【讨论】:

      • 我的文件夹结构类似于 FolderA/FolderB 。文件夹 B 包含 .aspx.cs [包含错误的文件] 和 global.asax 文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多