Мы используем настраиваемую политику для проверки некоторых требований к базе данных (токена, сохраненной в базе данных), и мне нужна информация о сеансе, поэтому я ввел IHttpContextAccessor для использования HttpContext.Session.Неверный HttpContext в политике
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
Я могу видеть, что:
- Я не получить правильно HttpContext.Session, это бросить InvalidOperationException
- Запрос не является правильным: Путь пустой, и это должно быть что-то вроде '/ Home/Index'
Я повторно использовал SessionMiddleware в своем проекте, и я вижу, что пользовательский сеанс правильно восстановлен в HttpContext, но в моей Политике я получаю неправильный. SessionMiddleware правильно добавляется до промежуточного ПО MVC. Есть идеи ?
РЕШЕНИЕ (thanks @JoeAudette) Храните аксессуар, пока не понадобится HttpContext.
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_accessor = contextAccessor;
}
protected override void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Right context ...
var contextHttp = _accessor.HttpContext;
}
вместо того, чтобы контекст в конструкторе, попытайтесь держать contextAccessor вокруг и ждать, пока вы не получите фактический контекст, пока вы не проверите его –
Это было решение :) Много часов только для этого ... Возможно, вы сможете опубликовать ответ, чтобы я мог отметить его как разрешение –
рад, что сработал , Я разместил его как ответ –