Asp.net 如何捕获应用程序_BeginRequest中的*all*异常?

Asp.net 如何捕获应用程序_BeginRequest中的*all*异常?,asp.net,.net,exception,exception-handling,Asp.net,.net,Exception,Exception Handling,我正在尝试捕获应用程序_BeginRequest中发生的特定异常 到目前为止,我完全无法捕获异常以查看出了什么问题,但是用户看到了500个内部服务器错误。所有其他异常都用Elmah记录,但在本例中,Elmah没有记录它 try { if (!String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_BLUECOAT_VIA"])) { string original = Request

我正在尝试捕获应用程序_BeginRequest中发生的特定异常

到目前为止,我完全无法捕获异常以查看出了什么问题,但是用户看到了500个内部服务器错误。所有其他异常都用Elmah记录,但在本例中,Elmah没有记录它

try
    {
        if (!String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_BLUECOAT_VIA"]))
        {
            string original = Request.QueryString.ToString();
            HttpContext.Current.RewritePath(Request.Path + "?" + original.Replace(Server.UrlEncode("amp;"), "&"));
        }
    }
    catch (Exception ex) { 
    }
如果我将catch改为catch(Exception ex),则不会捕获异常,错误仍然会发生


如果我注释掉try块内的代码,页面加载正常,没有错误,因此错误肯定发生在try块内,但以某种方式抛出了一个异常,而该异常无法使用try/catch块捕获。

try
exception exception=Server.GetLastError()

您还可以在同一个Globals类中使用Application_Error事件处理未捕获的异常

 protected void Application_Error(object sender, EventArgs e){
      Exception exception = Server.GetLastError(); 
 }

我怀疑你的
web.config
(或者,不太可能的是,在核心机器配置中)有什么问题-如果它不能破译一个正常的配置,它就永远不会运行你的(或ELMAHs)代码。错误肯定是直接发生在try块中。如果我删除了try块的内容,则不会发生异常。我怀疑错误是RewritePath方法。如果我让异常发生,则应用程序_错误不会实际触发,因此此方法对我不起作用:(在catch块中尝试Server.GetLastError()实际上刚刚意识到,即使catch{}没有抓住它。我一定是在错误的网站上测试,当时我认为这是有效的。我已经相应地更新了我的问题。