【问题标题】:WebAPI 2 attribute routing enable session stateWebAPI 2 属性路由启用会话状态
【发布时间】:2013-11-14 12:15:35
【问题描述】:

我们想出了如何使用 webapi Sample here 启用会话状态

现在我们有了 WebApi 2 属性路由,所以我们不再有路由对象来注入自定义处理程序。

有没有办法通过属性路由启用会话状态?

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

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

    var session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current)
    

    Api 控制器专为 RESTful 服务而设计,通常应该是无状态的。不是每次都加载会话是使它们更轻的原因之一。

    【讨论】:

    • @RolandoCC:您需要在Application_PostAuthorizeRequest 事件中写入System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);global.asaxCheck this answer here
    【解决方案2】:

    您需要将此添加到 global.asax

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

    然后您可以通过以下方式访问会话:

    HttpContext.Current.Session
    

    【讨论】:

    • 我试过了,但是这种方法有一个严重的缺陷:会话确实存在,但是每个请求的 SessionID 都不同。
    【解决方案3】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 2023-03-12
      • 1970-01-01
      • 2014-09-26
      • 2016-12-17
      • 2015-09-09
      • 2013-08-04
      • 2013-11-25
      相关资源
      最近更新 更多