powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web API логирование и эксепшнс
13 сообщений из 13, страница 1 из 1
Web API логирование и эксепшнс
    #39503037
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется производить логирование реквестов/респонсов поступающих через Web API. Гугл говорит что требуется реализация через DelegatingHandler

https://weblogs.asp.net/fredriknormen/log-message-request-and-response-in-asp-net-webapi

Однако я вижу в Global.asax файле методы Application_BeginRequest и Application_EndRequest, можно-ли логировать с помощью них? Какая вообще разница между ними и DelegatingHandler?
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503044
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordОднако я вижу в Global.asax файле методы Application_BeginRequest и Application_EndRequest, можно-ли логировать с помощью них? Какая вообще разница между ними и DelegatingHandler?

Методы в Global.asax относятся к классу веб-приложения (HttpApplication), которое будет работать только в IIS. WebAPI же не привязан к веб-приложению, и может хоститься отдельно от IIS и вообще ему не нужен класс веб-приложения.

Используйте DelegatingHandler.
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503047
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, спасибо, еще вопрос про эксепшнс (забыл вставить его в пост), каким образом отлавливаются необработанные исключения? Требуется скажем при возникновении исключительной ситуации залогировать ее и вместо 500 Internal Server Error и полного стэка отправить просто кастомизированное сообщение об ошибке. Как такое можно реализовать?
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503150
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503256
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМетоды в Global.asax относятся к классу веб-приложения (HttpApplication), которое будет работать только в IIS. WebAPI же не привязан к веб-приложению, и может хоститься отдельно от IIS и вообще ему не нужен класс веб-приложения.

Используйте DelegatingHandler.

сейчас при тестировании выплыл следующий момент - если метод вызван с ошибкой, например ожидается serv\mymethod, а набрано serv\myxxxxx или serv\mymethod\555 т.е. когда метод не существует, то DelegatingHandler не вызывается, а вот Application_BeginRequest срабатывает. Почему так происходит? Можно-ли заставить DelegatingHandler тоже обрабатывать подобные ошибки?
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503264
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenford,

Используй вот это решение:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/web-api-global-error-handling

там есть как перехват, так и логгирование исключений.
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503351
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 не маппится на класс входного параметра), чем такое можно поймать?
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503374
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, но это устаревший способ.
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503414
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу и можно ловить ошибки глобально в методах Global.asax, но это устаревший способ.
мм а чего эт устаревший то? модно через фильтры?)
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503476
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuhVosttНу и можно ловить ошибки глобально в методах Global.asax, но это устаревший способ.
мм а чего эт устаревший то? модно через фильтры?)

Модно через фильтры и middleware. Ну и современном фреймворке Global.asax попросту отсутствует.
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503850
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь такой вопрос возник, при отлавливании эксепшн перестает работать DelegatingHandler который отслеживает исходящие сообщения.
Ловля эксепшенов сделана по примеру выше переопределением IExceptionHandler

Код: c#
1.
config.Services.Replace(typeof(System.Web.Http.ExceptionHandling.IExceptionHandler), new UnhandledExceptionHandler());



Если эксепшн перехвачен, то логирования исходящего сообщения (через DelegatingHandler) не происходит. Почему так происходит?

Во всех других случаях логирование работает нормально
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503854
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenford,

перехват эксепшена не убирает факт ошибки :) просто останавливает передачу исключения вверх по pipeline-стеку. поэтому логгировать эксепшены надо IExceptionLogger
...
Рейтинг: 0 / 0
Web API логирование и эксепшнс
    #39503924
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttstenford,

перехват эксепшена не убирает факт ошибки :) просто останавливает передачу исключения вверх по pipeline-стеку. поэтому логгировать эксепшены надо IExceptionLogger
хм, не совсем понятно. Логирование эксепшена я сделал в момент его обработки, это как-бы даже побочное действие можно сказать.
Предположим мне вообще эксепшены не надо логировать, все что хочу - это DelegatingHandler для логирования входящих и исходящих сообщений плюс обработка исключений. Почему как только исключение обработалось (я заменил там текст сообщения что-бы вместо ругательств и полного стэка уходило юзер френдли извинение) DelegatingHandler отказывается мне залогировать исходящее сообщение с моим новым текстом-то? Как эти два действия вообще оказались связаны с друг другом? Или как вы говорите прервался стэк и все что теперь можно сделать это логировать исходящее сообщение прямо там-же, где обрабатываю исключение?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web API логирование и эксепшнс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]