Для доступа к Reuqest из других слоев, кроме Razor Page
, вы можете попробовать IHttpContextAccessor
.
. Для общего способа обработки пользовательских данных из запроса вы можете создать службу, как показано ниже:
public interface IUserService
{
IdentityUser GetUser();
}
public class UserService:IUserService
{
private readonly ApplicationDbContext _context;
private readonly HttpContext _httpContext;
public UserService(ApplicationDbContext context
, IHttpContextAccessor httpContextAccessor)
{
_context = context;
_httpContext = httpContextAccessor.HttpContext;
}
public IdentityUser GetUser()
{
StringValues userId = "";
if (_httpContext.Request.Headers.TryGetValue("userId", out userId))
{
var user = _context.Users.FirstOrDefault(u => u.Id == userId);
return user;
}
else
{
return null;
}
}
}
А затем зарегистрируйтесь как
services.AddScoped<IUserService, UserService>();
Затем вы можете разрешить IUserService
из DI, чтобы использовать их, когда вы хотите получить доступ к информации о пользователе.
public class IndexModel : PageModel
{
private readonly IUserService _userService;
public IndexModel(IUserService userService)
{
_userService = userService;
}
public void OnGet()
{
var user = _userService.GetUser();
}
}