У меня угловой проект, и я использую .net core 2.o Web API. Я сохранил свою информацию о пользователе в JWT, и я хочу, чтобы журнал каждой операции базы данных. Я могу получить доступ к информации о пользователе, отправив jwt и взяв из request.header на стороне сервера. Но проблема в том, где можно хранить? В моих старых проектах MVC, я мог хранить в сессии. Но этот проект API. И мы работаем с JWT, а не сессией. Как я могу достичь этого хранилища UserInfo во время запроса начала до конца. И я хочу получить доступ к UserInfo отовсюду. Это мой actionFilter:
public class TestFilterAttribute : System.Web.Http.Filters.FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var requestedUserInfo= context.HttpContext.Request.Headers["Authorization"];
??????????????? = requestedUserInfo;
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
Моя архитектура такая:
Contoller => Сервис => Репозиторий.
Итак, я должен отправить параметры как UserInfo во всех методах. Поэтому я не хочу добавлять все параметры метода как UserInfo. Итак, я хочу научиться избавляться от этой проблемы.
MyController.cs
[HttpGet("GetAllStudents")]
public async Task<ServiceResult>GetAllStudents()
{
var requestedUserId= context.HttpContext.Request.Headers["Authorization"];
return await (studentService.GetAllStudents(requestedUserId));
}
Мой сервис.cs
public async Task<ServiceResult> GetAllStudents(int requestedUserId)
{
return await unitOfWork.studentRepo.GetAllStudents(requestedUserId);
}
Мой репозиторий.cs
public async Task<List<Student>> GetAllStudents(int requestedUserId)
{
LogOperation(requestedUserId);
return context.Students.ToList();
}
Вы можете видеть, что каждый метод отправляет requestUserId. Как я могу избавиться от этого?