当前位置: 移动技术网 > IT编程>开发语言>c# > c#在WebAPI使用Session的方法

c#在WebAPI使用Session的方法

2019年07月18日  | 移动技术网IT编程  | 我要评论
最近在改写webapp时要将以前用泛型处理例程写的captcha 改成使用webapi 来实作机制,在实作的过程中发现使用irequiressessionstate ses

最近在改写webapp时要将以前用泛型处理例程写的captcha 改成使用webapi 来实作机制,在实作的过程中发现使用irequiressessionstate session也无法使用(context.session==null)

查过一些文章才发现需要在注册api路由需将routehandler 改写,才能使用。以下用asp.net mvc 4来说明要实作的部分

建立httpcontrollerhandler和httpcontrollerroutehandler 并覆写它

  public class sessionroutehandler : httpcontrollerhandler, irequiressessionstate
  {
    public sessionroutehandler(routedata routedata) : base(routedata)
    {

    }
  }

  public class sessioncontrollerroutehandler : httpcontrollerroutehandler
  {
    protected override ihttphandler gethttphandler(requestcontext requestcontext)
    {

      return new sessionroutehandler(requestcontext.routedata);

    }

  }

在webapiconfig中将config.routes.maphttproute 改成

routetable.routes.maphttproute(using system.web.routing)并指定routehandler

public static void register(httpconfiguration config)
{
  routetable.routes.maphttproute(

  name: "defaultapi",

  routetemplate: "api/{controller}/{id}",

  defaults: new { id = routeparameter.optional }

  ).routehandler=new sessioncontrollerroutehandler();
}

或者 在mvc的webapi中默认是没有开启session会话支持的。需要在global中重写init方法来指定会话需要支持的类型

public override void init()
    {
      postauthenticaterequest += mvcapplication_postauthenticaterequest;
      base.init();
    }

    void mvcapplication_postauthenticaterequest(object sender, eventargs e)
    {
      httpcontext.current.setsessionstatebehavior(
        sessionstatebehavior.required);
    }

或者:

    public override void init()
    {
      this.postauthenticaterequest += (sender, e) => httpcontext.current.setsessionstatebehavior(sessionstatebehavior.required);
      base.init();
    }

在默认情况下是没有开启的。sessionstatebehavior有四个值:

  • default使用默认asp.net逻辑来确定请求的会话状态行为。默认逻辑是寻找ihttphandler中是否存在标记会话状态接口。
  • disabled未启用会话状态来处理请求。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。
  • readonly为请求启用只读会话状态。这意味着会话状态无法更新。此设置将覆盖已通过检查请求的处理程序确定的任何会话状态行为。
  • required为请求启用完全的读写会话状态行为。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网