|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
Для целей логгирования мне нужно в произвольном методе получить доступ к HttpRequest и считать его Headers, часть из которых мне нужно залогировать. Есть ли какое-то глобальное, статическое свойство для этого ? Не очень хочется протягивать это свойство через все вызовы методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 15:49 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
Инжектишь IHttpContextAccessor . Но использовать это где-то кроме, например, MVC-контроллеров совершенно трефно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 16:14 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore, ваще это нужно делать в промежуточном слое, а не в "произвольном методе" -- такие подходы нужно уже давно похоронить ) https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2019, 02:58 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore, вот чуть устаревший, но фактически рабочий примерчик https://exceptionnotfound.net/using-middleware-to-log-requests-and-responses-in-asp-net-core/ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2019, 02:59 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
hVostt WaspNewCore, ваще это нужно делать в промежуточном слое, а не в "произвольном методе" -- такие подходы нужно уже давно похоронить ) https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1 Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ" Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов. Код: c# 1. 2. 3. 4. 5. 6.
Как это можно реализовать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 11:48 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ" Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов. Как это можно реализовать ? А накука для этого вообще HttpContext? В невебовских приложениях, по-твоему, логирование через HttpContext (которого там вообще нет) делают? Инжекть просто свой логгер в тот компонент, где тебе логирование надо, вот и все. Но, вообще, это по-хорошему следует делать через DI interception (я, правда, не в курсе, есть ли он в виде какого-нибудь плагина для "базового" коровского DI, или нет). Автофак, например, его умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 12:47 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
Ладно ок. Сделал scoped сервис, который инжекчу в логгер. Также инжекчу этот сервис в IAsyncResourceFilter, который считывает хэдеры и передает нужные значения в этот сервис. Думаю это правильное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 13:04 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore Ситуация простая - логгирование выполнения некоего алгоритма: "Зашли в функцию 1 с такими то параметрами", "вызвали метод такой то", "получили ответ от сервиса. ой, а это не хороший ответ" Это не реализовать через промежуточный слой - в промежуточном слое это все один единственный вызов. Это разные записи в лог. Журналирование HTTP запроса -- это middleware Далее, запись в журнал остальных событий через ILogger. То, что вы делаете -- это неправильно: WaspNewCore Код: c# 1.
Вы всё смешали в кучу, и обязательно огребёте. Отдельно журналируете HTTP запрос, со всеми заголовками и т.д. ASP.NET Core добавляет в контекст сквозной идентификатор запроса RequestId, который будет добавлен в каждую запись журнала в рамках запроса. Так вы сможете найти все свои заголовки и вообще всю поднаготную. WaspNewCore Ладно ок. Сделал scoped сервис, который инжекчу в логгер. Также инжекчу этот сервис в IAsyncResourceFilter, который считывает хэдеры и передает нужные значения в этот сервис. Думаю это правильное решение. Нет. Неправильное. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 13:11 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
hVostt, Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. А вы мне про то, что я айду эту информацию в логах. Мне для этого придется сводить логи Http вызовов и бизнес логов. А я хочу, чтобы эта информация была в одной строчке. Чтобы читать было удобно. Для этого, как выше написал, сделал scoped сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 14:10 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore, а для чего все это? Отладить работу программы? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 15:30 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore Для этого, как выше написал, сделал scoped сервис. Ты потом задолбешься дебажить, когда совершенно случайно заинжектишь его не туда куда надо. Все, что не "транзиент" должно использоваться только по очень реальной нужде и с большой осторожностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 15:53 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. Ты можешь подетальней объяснить для чего? Если у тебя HTTP заголовок как-то учавствует в БЛ, то контроллер должен сам его оттуда извлечь (лучше всего с помощью FromHeader(Name="bla-bla-bla") ) и передать его в БЛ, например, параметром. А там уже делай с ним что хочешь - хоть логгируй, хоть на принтер выводи. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 16:00 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
fkthat WaspNewCore Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. Ты можешь подетальней объяснить для чего? Если у тебя HTTP заголовок как-то учавствует в БЛ, то контроллер должен сам его оттуда извлечь (лучше всего с помощью FromHeader(Name="bla-bla-bla") ) и передать его в БЛ, например, параметром. А там уже делай с ним что хочешь - хоть логгируй, хоть на принтер выводи. Все верно. В хедере передается часть данных из бизнес логики. Вы предлагаете мне проталкивать это одно свойство через весь стек вызовов, чтобы я могу где то там на 15-ом уровне одного из сервисов залогировать его ? Кхм... Он важен для бизнес логики, он используется. Я решил, что лучше записывать его в scoped сервис. Чем он вам не нравится ? Это же стандартная реализация DI. Понятно, что его его можно будет инжектить только в другие такие же scoped сервисы - меня это устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:12 |
|
Как получить HttpRequest в AspNet Core в произвольной точке выполнения ?
|
|||
---|---|---|---|
#18+
WaspNewCore hVostt, Но мне нужно при логгировании бизнес логики прицепить аттрибут из заголовка Http запроса. А вы мне про то, что я айду эту информацию в логах. Мне для этого придется сводить логи Http вызовов и бизнес логов. А я хочу, чтобы эта информация была в одной строчке. Чтобы читать было удобно. Для этого, как выше написал, сделал scoped сервис. ну ок. нужно так нужно. вы спрашивали, как правильно, я ответил :) логи желательно делать более универсальными, чтобы можно было отвечать на вопросы, которых вы сейчас не знаете, с большим охватом. вы увязываете конкретную запись лога с конкретным значением заголовка, а как он у вас используется? не извлекается ли значение заголовка в какое-то поле, откуда и надо читать? плохо, что вы обращаетесь по сути к RAW значению из кода логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2019, 17:41 |
|
|
start [/forum/topic.php?fid=18&msg=39900112&tid=1354844]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 240ms |
total: | 486ms |
0 / 0 |