asp.net 自定义错误页面不起作用

Posted

技术标签:

【中文标题】asp.net 自定义错误页面不起作用【英文标题】:asp.net Custom error page not working 【发布时间】:2016-05-03 09:58:57 【问题描述】:

我在 IIS8.5 上有一个自定义错误页面。有时错误页面本身会抛出异常:

对象引用未设置为对象的实例。

这是我背后的代码的一部分:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        HttpContext.Current.Response.StatusCode = 500
        'Dim CurrentException As Exception = Server.GetLastError()
        'virheettxt.text = CurrentException.Message
        Dim hostName = System.Net.Dns.GetHostName()



        Dim ctxOBJ As HttpContext
        Dim exceptionOBJ As Exception
        Dim errorInfoTXT As String

        ctxOBJ = HttpContext.Current()

        exceptionOBJ = ctxOBJ.Server.GetLastError()

        errorInfoTXT = " <br>Offending URL: " & iif(Not ctxOBJ Is Nothing, ctxOBJ.Request.Url.ToString(), "ei saatavilla") &
"<br>Source: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.Source.ToString(), "ei saatavilla") &
"<br>Message: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.Message.ToString(), "ei saatavilla") &
"<br>Stack trace: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.StackTrace.ToString(), "ei saatavilla") &
"<br>Target Site: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.TargetSite.ToString(), "ei saatavilla") &
"<br>Server: " & hostName
        Dim virheurlsc = ctxOBJ.Request.Url.ToString()



        ctxOBJ.Server.ClearError()

错误来自行:errorInfoTXT = " 违规网址:......

如果有办法捕捉错误行,在某些情况下我真的需要它...?

【问题讨论】:

第二个问题请见Add line numbers to stack trace of ASP.NET web site that is deployed in release mode。 我认为我提到的答案告诉你。 如果我理解这一点,则不可能在单独的自定义错误页面上有行号。它必须在应用程序内部构建吗?经典的asp页面呢?我们正在使用一些并且确实需要来自 aspx(vb) 自定义错误页面上的错误行。 【参考方案1】:

问题来自使用Iif,它同时评估真假情况。改用If() operator 可以防止这种情况发生。

您还应该在尝试使用之前检查ctxOBJ 是否为空,如果您在 If()s 中颠倒真假参数,它会使其更简单一点:

Dim ctxOBJ As HttpContext = HttpContext.Current()
Dim exceptionOBJ As Exception = Nothing

If ctxOBJ IsNot Nothing Then
    exceptionOBJ = ctxOBJ.Server.GetLastError()
End If

Dim errorInfoTXT As String = " <br>Offending URL: " & If(ctxOBJ Is Nothing, "ei saatavilla", ctxOBJ.Request.Url.ToString()) &
"<br>Source: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.Source.ToString()) &
"<br>Message: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.Message.ToString()) &
"<br>Stack trace: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.StackTrace.ToString()) &
"<br>Target Site: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.TargetSite.ToString()) &
"<br>Server: " & hostName

【讨论】:

以上是关于asp.net 自定义错误页面不起作用的主要内容,如果未能解决你的问题,请参考以下文章

来自引用项目的 ASP.NET 自定义配置部分不起作用?

asp.net core kendo ui 网格自定义命令模板不起作用

自定义授权过滤器在 ASP.NET Core 3 中不起作用

ASP.NET 2.0 自定义客户端验证在 Internet Explorer 中不起作用

从 ASP.NET Core 1.1 MVC 迁移到 2.0 后,自定义 cookie 身份验证不起作用

为啥 ASP.NET Core 密码验证规则不起作用?