Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebAPI 2中使用会话_C#_Asp.net Web Api - Fatal编程技术网

C# 在WebAPI 2中使用会话

C# 在WebAPI 2中使用会话,c#,asp.net-web-api,C#,Asp.net Web Api,我已经了解到,在web api 2中使用enable session的有效方法如下: protected void Application_PostAuthorizeRequest() { System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly); } 我还创建了一个类,该类继承自AuthorizationFilter

我已经了解到,在web api 2中使用enable session的有效方法如下:

protected void Application_PostAuthorizeRequest()
  {
    System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
  }
我还创建了一个类,该类继承自
AuthorizationFilterAttribute
,并重写
OnAuthorization
方法


但从未调用此事件-我做错了什么?

您可以尝试创建一个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>


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