powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
15 сообщений из 15, страница 1 из 1
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899175
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для целей логгирования мне нужно в произвольном методе получить доступ к HttpRequest и считать его Headers, часть из которых мне нужно залогировать.

Есть ли какое-то глобальное, статическое свойство для этого ?
Не очень хочется протягивать это свойство через все вызовы методов.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899191
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инжектишь IHttpContextAccessor . Но использовать это где-то кроме, например, MVC-контроллеров совершенно трефно.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899337
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

ваще это нужно делать в промежуточном слое, а не в "произвольном методе" -- такие подходы нужно уже давно похоронить )

https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899338
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

вот чуть устаревший, но фактически рабочий примерчик

https://exceptionnotfound.net/using-middleware-to-log-requests-and-responses-in-asp-net-core/
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899864
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
WaspNewCore,

ваще это нужно делать в промежуточном слое, а не в "произвольном методе" -- такие подходы нужно уже давно похоронить )

https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1



Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ"
Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов.
Код: c#
1.
2.
3.
4.
5.
6.
public Task DoSomething (MyParams myParams)
{
  _logger.LogInput (myParams)  // caller null
  ...
  _logger.LogInfo("Что то сделали. Информация из заголовков {Headers[""]}")   << Как тут получить доступ к хедерам ?
}



Как это можно реализовать ?
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899902
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore
Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ"
Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов.

Как это можно реализовать ?

А накука для этого вообще HttpContext? В невебовских приложениях, по-твоему, логирование через HttpContext (которого там вообще нет) делают? Инжекть просто свой логгер в тот компонент, где тебе логирование надо, вот и все. Но, вообще, это по-хорошему следует делать через DI interception (я, правда, не в курсе, есть ли он в виде какого-нибудь плагина для "базового" коровского DI, или нет). Автофак, например, его умеет.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899920
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно ок. Сделал scoped сервис, который инжекчу в логгер.
Также инжекчу этот сервис в IAsyncResourceFilter, который считывает хэдеры и передает нужные значения в этот сервис.

Думаю это правильное решение.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899924
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore
Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ"
Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов.


Это разные записи в лог.
Журналирование HTTP запроса -- это middleware
Далее, запись в журнал остальных событий через ILogger.

То, что вы делаете -- это неправильно:

WaspNewCore
Код: c#
1.
_logger.LogInfo("Что то сделали. Информация из заголовков {Headers[""]}")   << Как тут получить доступ к хедерам ?



Вы всё смешали в кучу, и обязательно огребёте.

Отдельно журналируете HTTP запрос, со всеми заголовками и т.д.
ASP.NET Core добавляет в контекст сквозной идентификатор запроса RequestId, который будет добавлен в каждую запись журнала в рамках запроса. Так вы сможете найти все свои заголовки и вообще всю поднаготную.


WaspNewCore
Ладно ок. Сделал scoped сервис, который инжекчу в логгер.
Также инжекчу этот сервис в IAsyncResourceFilter, который считывает хэдеры и передает нужные значения в этот сервис.

Думаю это правильное решение.



Нет. Неправильное.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39899996
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. А вы мне про то, что я айду эту информацию в логах. Мне для этого придется сводить логи Http вызовов и бизнес логов. А я хочу, чтобы эта информация была в одной строчке. Чтобы читать было удобно.
Для этого, как выше написал, сделал scoped сервис.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900074
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

а для чего все это? Отладить работу программы?
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900112
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore
Для этого, как выше написал, сделал scoped сервис.

Ты потом задолбешься дебажить, когда совершенно случайно заинжектишь его не туда куда надо. Все, что не "транзиент" должно использоваться только по очень реальной нужде и с большой осторожностью.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900122
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore
Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса.

Ты можешь подетальней объяснить для чего? Если у тебя HTTP заголовок как-то учавствует в БЛ, то контроллер должен сам его оттуда извлечь (лучше всего с помощью FromHeader(Name="bla-bla-bla") ) и передать его в БЛ, например, параметром. А там уже делай с ним что хочешь - хоть логгируй, хоть на принтер выводи.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900237
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat
WaspNewCore
Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса.

Ты можешь подетальней объяснить для чего? Если у тебя HTTP заголовок как-то учавствует в БЛ, то контроллер должен сам его оттуда извлечь (лучше всего с помощью FromHeader(Name="bla-bla-bla") ) и передать его в БЛ, например, параметром. А там уже делай с ним что хочешь - хоть логгируй, хоть на принтер выводи.


Все верно. В хедере передается часть данных из бизнес логики.
Вы предлагаете мне проталкивать это одно свойство через весь стек вызовов, чтобы я могу где то там на 15-ом уровне одного из сервисов залогировать его ? Кхм...

Он важен для бизнес логики, он используется. Я решил, что лучше записывать его в scoped сервис. Чем он вам не нравится ? Это же стандартная реализация DI. Понятно, что его его можно будет инжектить только в другие такие же scoped сервисы - меня это устраивает.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900286
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore
hVostt,

Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. А вы мне про то, что я айду эту информацию в логах. Мне для этого придется сводить логи Http вызовов и бизнес логов. А я хочу, чтобы эта информация была в одной строчке. Чтобы читать было удобно.
Для этого, как выше написал, сделал scoped сервис.


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

вы увязываете конкретную запись лога с конкретным значением заголовка, а как он у вас используется?
не извлекается ли значение заголовка в какое-то поле, откуда и надо читать?

плохо, что вы обращаетесь по сути к RAW значению из кода логики.
...
Рейтинг: 0 / 0
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
    #39900288
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

т.е. получается, что ради логов, вы протащили детали реализации.
что несомненно и 100% плохо.

ту же задачу не так решать надо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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