2016-04-19 26 views
1

我想在我的web api非mvc应用程序中使用会话变量。Web api中会话状态变量的用法

我已经在我的控制器

public class AuthenticateController : ApiController 
{ 
[Route("api/CheckLogin")] 
public string AuthenticateUser(Models.Customer customer) 
{ 

HttpContextBase context = null; 
var httpContext = context as HttpContextBase; 
httpContext.Session["username"] = "sa"; 

} 

启用了global.aspx网页会话

protected void Application_PostAuthorizeRequest() 
     { 
      HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); 
     } 

,但现在我得到空裁判的错误。

我怎样才能做到这一点

请帮

+0

让我直截了当地说:你创建一个名为'context'的变量,将它设置为'null',将该空值作为'HttpContextBase'强制转换,然后尝试使用它? 在某些时候,您必须将其设置为等于当前上下文,或者至少将其设置为某个非空值。即'context = HttpContext.Current;'。 – TheRotag

+0

你不需要'HttpContextBase context = null;'行。你需要在使用它之前检查httpContext是否为非null。如果你试图转换的对象不是HttpContextBase类型,那么'as'可以返回null。之后,您需要检查用户名是否已在会话中正确设置。通过检查该值为null来调试它,从Session对象中检索。 – ManoDestra

+0

我的确喜欢这个对象上下文; (Request.Properties.TryGetValue(“MS_HttpContext”,out context)) var httpContext = context as HttpContextBase;如果(httpContext!= null && httpContext.Session!= null) { httpContext.Session [“d”] =“sa”; } } – user2363957

回答

-1

context设置为null。所以基本上你正在执行null.Session["username"]!但是为什么你需要在这个实现中进行会话。这是一项REST服务吗?它应该是无国籍的。 在这里看到这个优秀的答案:Link