Core net 6 Razor Pages
От: CyberRussia  
Дата: 16.07.22 17:56
Оценка:
Добрый день,
Есть сайт на asp.net core 6 Razor Pages. Среди прочего самописный сервис. Практически каждый публичный метод этого сервиса требует User.Identity. Появилась идея в рамках развития сайта, переписать сервис так, чтобы не передавать каждый раз в метод User.Identity , а запрашивать его внутри сервиса.
Как это можно сделать?
Re: Core net 6 Razor Pages
От: RushDevion Россия  
Дата: 16.07.22 22:05
Оценка:
Самописный сервис — это что?
Класс, инстанс которого хостится в том же процессе, что основное приложение или отдельный процесс?

Если первое, то заведи что-то вроде
interface IAuthState
{
  User CurrentUser
}

В имплементации через IHttpContextAccessor получай доступ к текущему user identity и наваливай в User нужные данные (можно в БД сходить или из claims выдернуть).

Если же сервис — это отдельное приложение, то тут зависит от способа коммуникации с ним.
Но в любом случае все сведётся к тому, чтобы встроить в пайплайн исходящего запроса свой код, который точно так же через IHttpContextAccessor получит доступ к текущему пользователю и далее пропихнет эту инфу в сторонний сервис.

Для HTTP/REST/SOAP и HttpClient'a это делается через HttpMessageHandler и кастомные http-хидеры.
Для WCF есть точки расширения для модификации исходящих сообщений, но название на вскидку не вспомню.
Для GRPC/WebSocket/кастомных протоколов можно либо сгенерить interceptor (тот же Castle Windsor это умеет из коробки) через Dynamic Proxy, либо декоратор через, скажем, T4, ну, или руками написать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.