【问题标题】:use session in Web Api 2在 Web Api 2 中使用会话
【发布时间】:2015-05-12 22:34:06
【问题描述】:

我读过在 web api 2 中使用启用会话的有效方法如下:

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

我还创建了一个继承自AuthorizationFilterAttribute 并覆盖OnAuthorization 方法的类。

但是这个事件永远不会被调用 - 我做错了什么?

【问题讨论】:

  • AFAIK WebAPI2 应该是无状态的,因此使用不同的授权方法。
  • 是的。Web API 应该是“RESTFUL”,因此是无状态的。
  • 我知道 http 是无状态的。不过对我帮助不大……
  • 您需要会话的用例是什么?就个人而言,这是我关闭任何新的 asp.net 项目的第一件事 - 它是性能瓶颈,只会在您需要时阻碍未来的横向扩展。
  • 感谢 MacB。我们目前有很多需要会话的 Web 服务,并且由于使用了 属性,服务对会话具有读/写访问权限,这会导致会话状态阻塞。在 web api 中,我相信可以授予对会话的只读访问权限,这不会阻止。这个想法是迁移到 web api 以提高性能。

标签: c# asp.net-web-api


【解决方案1】:

您可以尝试创建一个 HttpModule:

public class WebApiSessionModule : IHttpModule
{
    protected virtual void OnPostAuthorizeRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;

        if (this.IsWebApiRequest(context))
        {
            context.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
        }
    }
}

您需要将其添加到您的 web.config 中

<system.web>
  <httpModules>

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 2016-02-21
    • 2012-03-24
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多