2013-11-03 18 views
11

我们想出如何实现与的WebAPI Sample here的WebAPI 2属性路由的会话状态

会话状态现在我们的WebAPI 2属性的路由,所以我们不再有路由对象注入自定义处理程序。

有没有什么方法可以通过属性路由启用会话状态?

回答

-2

您可以使用SessionStateUtility类获取会话状态。只需拨打电话:

var session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current) 

Api控制器设计用于宁静的服务,通常应该是无状态的。每次不加载会话是使它们更轻的事情之一。

+0

隐而不宣” t为我工作,得到null参考错误! – RolandoCC

+1

@RolandoCC:你将需要在'global.asax'的'Application_PostAuthorizeRequest'事件中编写'System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);'行。 [在这里检查这个答案](http://stackoverflow.com/a/22491093/1951058) –

7

你需要把它添加到Global.asax中

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

然后,你可以通过访问会话:

HttpContext.Current.Session 
+0

我试过这个,但这种方法存在一个严重的缺陷:会话确实存在,但SessionID因每个请求而不同。 – codinglifestyle

-1

在Global.asax

Private Sub WebApiApplication_PostAuthorizeRequest(sender As Object, e As EventArgs) Handles Me.PostAuthorizeRequest 
    System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required) 
End Sub