• 接口 ApiController调用Controller 模拟Session 封装


    原文:https://blog.csdn.net/qq_17255515/article/details/89338986


    定义一个基类

    public class BaseApiController : ApiController
    {
        /// <summary>
        /// 返回一个带session的controller
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        [HttpGet]
        public T GetController<T>() where T : System.Web.Mvc.Controller, new()
        {
            //模拟session
            System.IO.TextWriter writer = new System.IO.StringWriter();
            HttpRequest request = new HttpRequest("", "http://localhost:58059/Home/Index", "");
            HttpResponse response = new HttpResponse(writer);
            HttpContext context = new HttpContext(request, response);
            var container = new System.Web.SessionState.HttpSessionStateContainer(
                "",
                new SessionStateItemCollection(),
                new HttpStaticObjectsCollection(),
                20000,
                true,
                HttpCookieMode.UseCookies,
                SessionStateMode.Off,
                false
                );
            SessionStateUtility.AddHttpSessionStateToContext(context, container);
    
            var userInfo = (User as FormsPrincipal).UserData;
            context.Session.Add("userid", userInfo.userid);
            context.Session.Add("user", userInfo.user);
            context.Session.Add("Created", userInfo.Created);
            context.Session.Add("pwd", userInfo.pwd);
            context.Session.Add("userModel", userInfo.userModel);
    
            HttpContextBase httpContext = new HttpContextWrapper(context);
    
            T t = new T();
            System.Web.Mvc.ControllerContext controllerContext = new System.Web.Mvc.ControllerContext();
            controllerContext.HttpContext = httpContext;
            t.ControllerContext = controllerContext;
            return t;
        }
    }
    

    在ApiController中的使用

    [HttpGet, TokenAuthorize]
    public IHttpActionResult GetSessionInfo()
    {
        HomeController controller = GetController<HomeController>();
        var d = controller.GetSession().Data;
        return Json<dynamic>(d);
    }
    
  • 相关阅读:
    mysql limit关键字
    Android入门篇2-activity调用跟数据传递
    Android入门篇1-Hello World
    flask表单提交的两种方式
    ajax异步举例
    Android平台的一些常用命令
    python设计模式1:创建型模式
    python设计模式1:导言
    Python的高级特性12:类的继承
    django复习笔记3:实战
  • 原文地址:https://www.cnblogs.com/guxingy/p/12875210.html
Copyright © 2020-2023  润新知