Я использую jQuery для обработки всех моих потребностей ajax для сайта ASP.NET, написанного на VB. Когда я использую встроенную функцию $ .ajax для отправки POST в функцию кода программной части и возникает исключение, она просто выходит из функции и показывает ошибку на стороне клиента.
Помимо затруднения отладки при кодировании, более серьезной проблемой является то, что функция Application_Error в Global.asax не срабатывает при возникновении этих исключений. Это делает практически невозможным отслеживание производственных ошибок.
Почему бы не подняться до Application_Error? Можно ли заключить функцию кода программной части в оператор Catch?
Функция jQuery ajax:
$.ajax({
type: "POST",
url: "page.aspx/GetData",
data: "{'param':'" + param_value + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
processData(msg);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + textStatus + " - " + errorThrown);
}
});
Функция VB.NET:
<Script.Services.ScriptMethod()> _
<WebMethod()> _
Public Shared Function GetData(ByVal param As Integer) As String
'Parse some data
Return data
End Function
Для простоты. Мне нужно написать код обработки исключений только один раз вместо того, чтобы писать блок Catch для каждого отдельного веб-метода.





С .Net 3.5 вы можете вытащить Объект ScriptManager и зарегистрировать с ним свой javascript, это позволяет .Net управлять скриптами (это не только для MS Ajax, он работает со сторонними библиотеками), это может быть решением.
Я придумал работу. Хотя я не нашел способа напрямую получить ошибку для запуска события Application_Error, я обнаружил свойство в объекте jQuery XMLHttpRequest, которое содержит фактический текст исключения.
Вот пример, который покажет ошибку в предупреждении:
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + XMLHttpRequest.responseText);
}
Другая идея - отправить ошибку через AJAX в веб-метод, который будет обрабатывать всю логику событий ошибки.
Есть ли веская причина, по которой вы хотите обрабатывать ошибку в универсальной Application_Error, а не в самом методе GetData?