在两个MVC应用程序之间共享会话

时间:2013-01-20 08:07:16

标签: asp.net-mvc

我有一个旧应用程序,它有一个ActionResult函数,我希望将其包含在另一个较新的应用程序中。

我发现我可以添加旧控制器作为参考,将控制器实例化为对象,然后相应地调用ActionResult函数,如下所示:

public ActionResult test()
    {
        OlderApplication.Controllers.PatronController temp = new OlderApplication.Controllers.PatronController();

        return temp.Index();
    }

我的问题在于temp.Index()内部它引用了Session,它是以null形式而不是具有应该存在的值。我可以通过这种方式提供会话吗?

2 个答案:

答案 0 :(得分:1)

在您给出的示例中,您没有两个MVC应用程序 - 您拥有一个共享相同代码库的应用程序。 “应用程序”由网络服务器定义,但我离题了。

temp内的会话为空的原因是因为您没有正确初始化控制器 - 控制器不是POCO,它们需要初始化。请致电temp.Initialize(),但您需要自己创建RequestContext个实例,如下所示:

RequestContext context = new RequestContext( this.Context, this.RouteData );
OlderApplication.Controllers.PatronController oldController = new OlderApplication.Controllers.PatronController();
oldController.Initialize( context );

return oldController.Index();

虽然如果您正在完成此步骤,您也可以将旧控制器连接到区域注册和/或URI路由表中,从而无需编写此代码。

答案 1 :(得分:1)

正如戴指出你没有正确创建控制器。 我建议使用控制器工厂来创建控制器。

var oldController  = ControllerBuilder.Current.GetControllerFactory().CreateController(Request.RequestContext, "Patron");