欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#在WebAPI使用Session的方法

程序员文章站 2023-12-13 21:22:58
最近在改写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为请求启用完全的读写会话状态行为。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

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

上一篇:

下一篇: