首页 > Windows开发 > 详细

接口 ApiController调用Controller 模拟Session 封装

时间:2020-05-12 12:28:41      阅读:66      评论:0      收藏:0      [点我收藏+]

原文: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);
}

接口 ApiController调用Controller 模拟Session 封装

原文:https://www.cnblogs.com/guxingy/p/12875210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!