2016-05-03 3 views
2

Мы используем настраиваемую политику для проверки некоторых требований к базе данных (токена, сохраненной в базе данных), и мне нужна информация о сеансе, поэтому я ввел IHttpContextAccessor для использования HttpContext.Session.Неверный HttpContext в политике

public TokenValidHandler(IHttpContextAccessor contextAccessor) 
{ 
    _httpContext = contextAccessor.HttpContext; 
} 

Я могу видеть, что:

  1. Я не получить правильно HttpContext.Session, это бросить InvalidOperationException
  2. Запрос не является правильным: Путь пустой, и это должно быть что-то вроде '/ 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; 
} 
+3

вместо того, чтобы контекст в конструкторе, попытайтесь держать contextAccessor вокруг и ждать, пока вы не получите фактический контекст, пока вы не проверите его –

+0

Это было решение :) Много часов только для этого ... Возможно, вы сможете опубликовать ответ, чтобы я мог отметить его как разрешение –

+0

рад, что сработал , Я разместил его как ответ –

ответ

2

вместо того, чтобы контекст в конструкторе, попытайтесь держать в contextAccessor вокруг и ждать, чтобы получить фактический контекст только перед нужно проверить его

Смежные вопросы