Как получить реальное сообщение об исключении при использовании UpdatePanel? - PullRequest
1 голос
/ 30 июня 2011

Я не вижу реальной ошибки на своей странице ошибок при использовании UpdatePanel.В моем Global.asax у меня есть следующий код:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

    'Get the exception
    Dim lastError = Server.GetLastError()
    If lastError IsNot Nothing Then
        Dim ex As Exception = lastError.GetBaseException()
        If ex IsNot Nothing Then
            'Log the error
            If Log.IsErrorEnabled Then
                log4net.ThreadContext.Properties("method") = ex.TargetSite.Name
                log4net.ThreadContext.Properties("userId") = User.Current.UserName
                Log.Error(ex.Message, ex)
            End If
        End If
    End If

End Sub

Если я просматриваю журнал или устанавливаю точку останова, я вижу, что у меня проблема с тайм-аутом.Затем у меня есть следующий код для отправки пользователя на страницу ошибки и отображения ошибки:

<script language="javascript" type="text/javascript">
    function EndRequestHandler(sender, args) {
        if (args.get_error() != undefined) {
            // Let the framework know that the error is handled,
            //  so it doesn't throw the JavaScript alert.
            args.set_errorHandled(true);

            var errorMessage = args.get_error().message.replace(/</gi, "&lt;").replace(/>/gi, "&gt;");

            // If there is, show the custom error.
            window.location = _root + 'ShowError.aspx?error=' + encodeURI(errorMessage)
        }
    }
</script>

Но вместо этого я получаю сообщение об ошибке args.get_error ():

Sys.WebForms.PageRequestManagerServerErrorException: при обработке запроса на сервере произошла неизвестная ошибка.Код состояния, возвращаемый с сервера, был: 500

Что мне нужно сделать, чтобы сообщение об ошибке тайм-аута появилось на странице ошибки?

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Я наконец нашел это здесь: http://msdn.microsoft.com/en-us/library/bb398934.aspx

Хотя их пример не скомпилировался и не дал мне именно то, что мне было нужно, он направил меня в правильном направлении.Я смог контролировать сообщение, которое помещается в исключение Async, используя этот код:

Protected Sub ScriptManager1_AsyncPostBackError(ByVal sender As Object, ByVal e As System.Web.UI.AsyncPostBackErrorEventArgs)
    If e.Exception.Data("ExtraInfo") IsNot Nothing Then
        ScriptManager1.AsyncPostBackErrorMessage = _
           e.Exception.Message & _
           e.Exception.Data("ExtraInfo").ToString()
    Else
        ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message
    End If
End Sub

Мне также пришлось удалить defaultRedirect в web.config и только условно перенаправить, если это не был асинхронный вызов,Я сделал это, изменив свой Global.asax на это:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

    'Get the exception
    Dim lastError = Server.GetLastError()
    If lastError IsNot Nothing Then
        Dim ex As Exception = lastError.GetBaseException()
        If ex IsNot Nothing Then
            'Log the error
            If Log.IsErrorEnabled Then
                log4net.ThreadContext.Properties("method") = ex.TargetSite.Name
                log4net.ThreadContext.Properties("userId") = User.Current.DomainName
                Log.Error(ex.Message, ex)
            End If
            If Not IsAsyncPostBackRequest(Request) Then
                Server.Transfer("~/ShowError.aspx")
            End If
        End If
    End If

End Sub

Public Function IsAsyncPostBackRequest(request As HttpRequest) As Boolean
    Dim values = request.Headers.GetValues("X-MicrosoftAjax")
    If values IsNot Nothing Then
        For Each value In values
            Dim parts = value.Split(","c)
            For Each part In parts
                If part.Trim() = "Delta=true" Then
                    Return True
                End If
            Next
        Next
    End If
    Return False
End Function
0 голосов
/ 09 ноября 2012

Я столкнулся с некоторыми подобными вещами. Вы в основном правы, но вы все равно можете использовать свой собственный атрибут ошибок в файле web.config, просто указав в диспетчере сценариев игнорировать его с помощью этого атрибута: AllowCustomErrorsRedirect = "false"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...