Как Вы получаете доступ к Исходной Ошибке, Исходному файлу и Номеру строки исключения для использования на пользовательской ошибочной странице?

В основном я хочу взять следующее: alt text

И заставьте его соответствовать моделированию остальной части приложения.

Я создаю пользовательскую ошибочную страницу в своем C# базирующийся проект, и я хочу, чтобы это смогло показать ту же информацию, которая отображена на ошибочной странице значения по умолчанию ASP.NET. От игры с отражателем I видят, что это сгенерировано через HttpException.GetHtmlErrorMessage() но когда я пытаюсь использовать это в своем исключении, оно возвращается null.

5
задан Iain Fraser 18 June 2010 в 04:43
поделиться

3 ответа

Вам не нужно добавлять фильтр для захвата событий, просто обработайте Application_Error в global.asax.cs. Server.GetLastError( ) будет иметь информацию об исключении

Да, эм... Нет. Ошибка, показанная в исходном вопросе, показывает ошибку разбора/компиляции - эти ошибки происходят в конвейере HttpHandler для ASP.NET (ISAPI Filter в старых версиях IIS), т.е. до запуска вашего приложения, поэтому до любого из событий в Global.asax.

Хотя вы можете указать пользовательскую страницу ошибки (в web.config, machine.config или метабазе IIS), это могут быть только HTML файлы.

1) если вас интересуют только исключения, возникающие в вашем коде (т.е. ваш код компилируется, но затем возникает исключение), то вы можете воспользоваться предложением Дэна, приведенным выше, и обрабатывать событие Application_Error в Glocal.asax.

Если вы хотите обрабатывать исключения ASP.NET (например, ошибки парсинга/компиляции, ошибки конфигурационных файлов и т.д.), то вам нужно подключить (или заменить) ASP.NET HttpHandler.

Вы можете обернуть существующий обработчик, написав свой собственный и перехватывая любые исключения, а затем перенаправляя на другую страницу ошибок.

Вы должны указать свой обработчик в файле web.config (или machine.config, если это глобальный обработчик).

В Интернете есть несколько хороших руководств о том, как это сделать. Попробуйте начать здесь: http://msdn.microsoft.com/en-us/library/f3ff8w4a(VS.71).aspx

(основная проблема: для отлова ошибок парсинга/компиляции вам нужно написать обработчик/фильтр, который находится на уровень выше обработчика/фильтра ASP.NET (я полагаю)).

Надеюсь, это поможет, Dourn.

1
ответ дан 14 December 2019 в 18:59
поделиться

Я никогда не пробовал это делать, но все ошибки IIS записываются в журнал событий. Вы можете попробовать прочитать последнюю ошибку из журнала событий и отобразить ее, если она уже записана.

Вы также хотите добавить фильтр для захвата событий, чтобы убедиться, что вы показываете события из вашего приложения и что нет других событий об ошибках в течение значительного промежутка времени.

0
ответ дан 14 December 2019 в 18:59
поделиться

Иэн,

Я использовал этот код, чтобы сделать что-то подобное на странице пользовательской ошибки. Я не уверен, возможно ли отображение точной области исходного кода, вызвавшей ошибку, с помощью объекта Exception, но я смог использовать трассировку стека, которая включает номера строк и имена методов:

If Not IsPostBack Then
    Dim ex As Exception = Server.GetLastError().GetBaseException()
    lblExceptionMessage.Text = ex.Message.ToString()
    lblStackTrace.Text = ex.StackTrace().Replace(System.Environment.NewLine, "<br />")
End If

Вы также можете использовать ex. TargetSite, чтобы получить только имя метода, вызвавшего исключение.

HTH,

Майк

2
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: