接口 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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM