Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
Требуется производить логирование реквестов/респонсов поступающих через Web API. Гугл говорит что требуется реализация через DelegatingHandler https://weblogs.asp.net/fredriknormen/log-message-request-and-response-in-asp-net-webapi Однако я вижу в Global.asax файле методы Application_BeginRequest и Application_EndRequest, можно-ли логировать с помощью них? Какая вообще разница между ними и DelegatingHandler? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 07:28 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
stenfordОднако я вижу в Global.asax файле методы Application_BeginRequest и Application_EndRequest, можно-ли логировать с помощью них? Какая вообще разница между ними и DelegatingHandler? Методы в Global.asax относятся к классу веб-приложения (HttpApplication), которое будет работать только в IIS. WebAPI же не привязан к веб-приложению, и может хоститься отдельно от IIS и вообще ему не нужен класс веб-приложения. Используйте DelegatingHandler. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 07:39 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
ок, спасибо, еще вопрос про эксепшнс (забыл вставить его в пост), каким образом отлавливаются необработанные исключения? Требуется скажем при возникновении исключительной ситуации залогировать ее и вместо 500 Internal Server Error и полного стэка отправить просто кастомизированное сообщение об ошибке. Как такое можно реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 07:50 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
hVosttМетоды в Global.asax относятся к классу веб-приложения (HttpApplication), которое будет работать только в IIS. WebAPI же не привязан к веб-приложению, и может хоститься отдельно от IIS и вообще ему не нужен класс веб-приложения. Используйте DelegatingHandler. сейчас при тестировании выплыл следующий момент - если метод вызван с ошибкой, например ожидается serv\mymethod, а набрано serv\myxxxxx или serv\mymethod\555 т.е. когда метод не существует, то DelegatingHandler не вызывается, а вот Application_BeginRequest срабатывает. Почему так происходит? Можно-ли заставить DelegatingHandler тоже обрабатывать подобные ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 12:13 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
stenford, Используй вот это решение: https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/web-api-global-error-handling там есть как перехват, так и логгирование исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 12:17 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
hVosttstenford, Используй вот это решение: https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/web-api-global-error-handling там есть как перехват, так и логгирование исключений. Да, эту методику я уже нагугливал сегодня, но пока не вчитывался, мне хотелось-бы разобраться в причинах разного поведения... Я пока для себя не могу логически связать почему рекомендуется большинство методик монстрообразного размера, когда Application_BeginRequest / Application_EndRequest могут делать то-же самое, если все дело только в IIS так это не проблема, у нас все равно хоститься именно на нем будет. Ловлю эксепшенов я уже реализовал по вот этому примеру http://www.c-sharpcorner.com/article/exception-handling-in-asp-net-web-api/ Там все довольно просто оказалось А вот в отлавливание реквестов/респонсов пока не могу вникнуть, слишком противоречивая инфа в интернете Также скажем помимо ошибочных путей нам требуется логировать и неверный xml в параметрах, т.е. если вызван правильный метод, но с неверной структурой обьекта (т.е. пришедший в реквесте xml не маппится на класс входного параметра), чем такое можно поймать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 13:51 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
stenfordДа, эту методику я уже нагугливал сегодня, но пока не вчитывался, мне хотелось-бы разобраться в причинах разного поведения... Я пока для себя не могу логически связать почему рекомендуется большинство методик монстрообразного размера, когда Application_BeginRequest / Application_EndRequest могут делать то-же самое, если все дело только в IIS так это не проблема, у нас все равно хоститься именно на нем будет. Дело в том, что в новом ASP.NET Core уже нет никаких Application_BeginRequest / Application_EndRequest, и приложение может легко хостится без IIS, самостоятельно без дополнительных приседаний. Поэтому ваш код будет сложнее мигрировать. Даже если вам нужно как-то сейчас сделать и запинать, лишь бы хоть как-то работало, всё равно полезно узнать, как делать это правильно. Разве нет? stenfordА вот в отлавливание реквестов/респонсов пока не могу вникнуть, слишком противоречивая инфа в интернете Нет никаких противоречий. В ASP.NET MVC 5 добавили возможность работать поверх OWIN, поэтому реквесты можно было обрабатывать своими middle ware. Сейчас это единственный нормальный способ (для Core). stenfordТакже скажем помимо ошибочных путей нам требуется логировать и неверный xml в параметрах, т.е. если вызван правильный метод, но с неверной структурой обьекта (т.е. пришедший в реквесте xml не маппится на класс входного параметра), чем такое можно поймать? Ссылку уже приводил :) Ещё можно middleware. Ну и можно ловить ошибки глобально в методах Global.asax, но это устаревший способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 14:11 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
hVosttНу и можно ловить ошибки глобально в методах Global.asax, но это устаревший способ. мм а чего эт устаревший то? модно через фильтры?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 14:48 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuhVosttНу и можно ловить ошибки глобально в методах Global.asax, но это устаревший способ. мм а чего эт устаревший то? модно через фильтры?) Модно через фильтры и middleware. Ну и современном фреймворке Global.asax попросту отсутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 15:37 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
теперь такой вопрос возник, при отлавливании эксепшн перестает работать DelegatingHandler который отслеживает исходящие сообщения. Ловля эксепшенов сделана по примеру выше переопределением IExceptionHandler Код: c# 1. Если эксепшн перехвачен, то логирования исходящего сообщения (через DelegatingHandler) не происходит. Почему так происходит? Во всех других случаях логирование работает нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 10:09 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
stenford, перехват эксепшена не убирает факт ошибки :) просто останавливает передачу исключения вверх по pipeline-стеку. поэтому логгировать эксепшены надо IExceptionLogger ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 10:14 |
|
||
|
Web API логирование и эксепшнс
|
|||
|---|---|---|---|
|
#18+
hVosttstenford, перехват эксепшена не убирает факт ошибки :) просто останавливает передачу исключения вверх по pipeline-стеку. поэтому логгировать эксепшены надо IExceptionLogger хм, не совсем понятно. Логирование эксепшена я сделал в момент его обработки, это как-бы даже побочное действие можно сказать. Предположим мне вообще эксепшены не надо логировать, все что хочу - это DelegatingHandler для логирования входящих и исходящих сообщений плюс обработка исключений. Почему как только исключение обработалось (я заменил там текст сообщения что-бы вместо ругательств и полного стэка уходило юзер френдли извинение) DelegatingHandler отказывается мне залогировать исходящее сообщение с моим новым текстом-то? Как эти два действия вообще оказались связаны с друг другом? Или как вы говорите прервался стэк и все что теперь можно сделать это логировать исходящее сообщение прямо там-же, где обрабатываю исключение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 11:35 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39503264&tid=1355461]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 265ms |
| total: | 442ms |

| 0 / 0 |
