Допустим, у нас есть код, который извлекает список элементов из базы данных.Полученный список зависит от прав пользователя.Я хочу сделать этот код многократно используемым, то есть вызывать его из нескольких контроллеров.Какой стандартный способ сделать это?
Для аутентификации в моем коде я загружаю пользователя из базы данных через
User user = dbContext.User.SingleOrDefault(x => x.access_token == User.Identity.Name);
Это схема аутентификации, которую я использую в Startup.cs:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
}).AddCookie("Cookies", options =>
{
options.Cookie.Name = "auth_cookie";
options.Cookie.SameSite = SameSiteMode.None;
options.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = redirectContext =>
{
redirectContext.HttpContext.Response.StatusCode = 401;
return Task.CompletedTask;
}
};
});
Я попытался поместить код, извлекающий список, непосредственно в один контроллер и для других контроллеров, которым нужен код для вызова этого контроллера через
services.AddControllersAsServices()
, а затем
(MyController)HttpContext.RequestServices.GetService(typeof(MyController));
, но свойство User из ControllerBase было пустым.
Я прочитал всю документацию, которую смог найти, но не смог найти решение, которое имеет значение для свойств User или HttpContext.