Dentro de Application_Error, puede acceder a ScriptManager para determinar si la solicitud actual es una devolución de datos asincrónica. El objeto global HttpContext.Current.Handler en realidad apunta a la página que se está revisando, que contiene el objeto ScriptManager, que le dirá si la solicitud actual es asincrónica.
La siguiente declaración concisa ilustra cómo acceder al objeto ScriptManager y obtener esta información:
ScriptManager.GetCurrent(CType(HttpContext.Current.Handler, Page)).IsInAsyncPostBack
Por supuesto, esta afirmación fallará si la petición actual no es para una página, o si no hay ScriptManager en la página actual, asi que aquí hay un par más robusto de funciones que se pueden utilizar dentro de Global.asax para hacer la determinación:
Private Function GetCurrentScriptManager() As ScriptManager
'Attempts to get the script manager for the current page, if there is one
'Return nothing if the current request is not for a page
If Not TypeOf HttpContext.Current.Handler Is Page Then Return Nothing
'Get page
Dim p As Page = CType(HttpContext.Current.Handler, Page)
'Get ScriptManager (if there is one)
Dim sm As ScriptManager = ScriptManager.GetCurrent(p)
'Return the script manager (or nothing)
Return sm
End Function
Private Function IsInAsyncPostback() As Boolean
'Returns true if we are currently in an async postback to a page
'Get current ScriptManager, if there is one
Dim sm As ScriptManager = GetCurrentScriptManager()
'Return false if no ScriptManager
If sm Is Nothing Then Return False
'Otherwise, use value from ScriptManager
Return sm.IsInAsyncPostBack
End Function
Sólo tiene que llamar IsInAsyncPostback() desde Application_Error para obtener un valor lógico que indica el estado actual .
Obtiene errores genéricos de ASP.NET en el cliente porque intentar transferir/redirigir una solicitud asíncrona generará más errores, reemplazando y ofuscando el error original. Puede usar el código anterior para evitar la transferencia o redirección en tales casos.
También tenga en cuenta otro descubrimiento que realicé: aunque puede acceder al objeto ScriptManager con este método, por algún motivo, la configuración de su propiedad AsyncPostBackErrorMessage desde Application_Error no funciona. El nuevo valor no se pasa al cliente. Por lo tanto, aún necesitará manejar el evento OnAsyncPostBackError de ScriptManager en la clase de página.
http://www.codedigest.com/Articles/ASPNETAJAX/115_Error_Handling_in_ASPNet_Ajax_Applications.aspx –
En este momento ya estamos usando AllowCustomErrorsRedirect = false y la disponibilidad AsyncPostBackErrorMessage. Entonces no veo cómo el artículo es relevante. Pregunta actualizada para incluir el uso del controlador OnAsyncPostBackError. – BlueFox