2016-04-19 58 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