2013-12-12 3 views
4

Я знаю эту тему придумал много, но я не нашел тот, который работает для моей проблемы ..HttpContext.Current.Session Всегда Null

У меня есть GuestTokenValidationAttribute класс, производный от ActionFilterAttribute, там Я получаю токен из заголовка, и я использую его как токен String. Затем я хочу добавить этот токен к сеансу, но независимо от того, что я делаю, Session всегда равно нулю.

Пожалуйста, ребята, какие-либо указания или помощь будет высоко ценятся,

Пример кода ниже:

public class GuestTokenValidationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     string token; 
     try 
     { 
      token = actionContext.Request.Headers.GetValues("Authorization-Token").First(); 
     } 
     catch (Exception) 
     { 
      actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) 
      { 
       Content = new StringContent("Unauthorized User") 
      }; 
      return; 
     } 

     if(string.IsNullOrEmpty(token)) 
     { 
      actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) 
      { 
       Content = new StringContent("Unauthorized User") 
      }; 
      return; 
     } 

     try 
     { 
      var repository = DependencyResolver.Current.GetService<IRepository<Guest>>(); 
      var guest = repository.GetAll().FirstOrDefault(x => x.Token == token); 
      if(guest == null) 
      { 
       actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) 
       { 
        Content = new StringContent("Unauthorized User") 
       }; 
       return; 
      } 

     } 
     catch (Exception) 
     { 
      actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) 
      { 
       Content = new StringContent("Unauthorized User") 
      }; 
      return; 
     } 




     HttpContext.Current.Session.Add("guesttoken" ,token); 

     base.OnActionExecuting(actionContext); 

    } 
+6

У вас сеансы включены в web.config ? – RononDex

+0

У меня есть

+0

Это в контроллере API? –

ответ

1

MVC портированы на asp.net для решения таких проблем, как Session и ViewState, которые были истинная оппозиция природе Интернета. Как вы знаете, в MVC, все действия и меры должны рассматриваться в качестве лиц без запросов, которые ничего не должны быть оставлены до и после обработки запроса и принятых GC будет собирать все данные в ViewBags, сессии, переменные и т.д.

Поэтому, как настоятельно рекомендуется, общий способ обработки такой вещи - использовать собственные средства, поставляемые через чистую сеть, такие как файлы cookie, html-формы, html-входы, параметры URL-адреса и т. Д.

+0

Вопрос о WebAPI, а не MVC. WebAPI не поддерживает сеансы. Чтобы включить сеанс, см. Комментарий пользователя haim700. – LostInComputer

+0

WebAPI - это всего лишь часть MVC, которые создаются и запускаются во временных библиотеках MVC. Таким образом, MVC и WebAPI, естественно, не отличаются –

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