从 MVC 函数(复合 C-1)访问会话时为空



我是复合 C1 的新手,有以下情况:

我正在将 MVC 应用程序作为一组函数部署到复合。问题是我需要从我的 MVC 函数访问会话,但它是空的。

我已经测试了一些想法,但似乎没有一个适合我。

  • 在 ASP.NET 内运行 MVC 时 ASP.NET 会话为空
  • MVC 5 会话为空
  • 从一个控制器重定向到另一个控制器时会话为空 ASP.NET MVC
  • MVC ASP.net 会话为空
  • ASP.NET MVC - 会话为空

启动处理程序初始化如下:

public static void OnBeforeInitialize()
{
    var functions = MvcFunctionRegistry.NewFunctionCollection();
    functions.RegisterController<HomeController>("Company.Home");
    functions.RegisterAction<HomeController>("Index", "Company.HomeIndex");
    functions.RouteCollection.MapMvcAttributeRoutes();
    functions.RouteCollection.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
        );
}

然后,从任何控制器调用会话:

protected override void OnActionExecuting(ActionExecutingContext context)
{
    var session = this.Session; // returns null
    var request = this.Request; // this one is ok
    var response = this.Response; // this one is ok too
    // ...
}

返回空值。

任何帮助真的非常感谢。

在试图弄清楚为什么会话为空将近一天后,我发现我可以从OnActionExecuting访问System.Web.HttpContext.Current.Session。所以我只是使用旧的HttpSessionStateWrapper技巧来使其工作:

protected override void OnActionExecuting(ActionExecutingContext context)
{
    var session = System.Web.HttpContext.Current.Session;
    HttpSessionStateBase sessionBase = new HttpSessionStateWrapper(session);
    // ...
}

这仍然不能解决为什么会话为空的问题。根据我阅读的所有参考资料,应该是。诸如控制器实现IRequiresSessionState,路由问题以及许多其他可能的解决方案之类的事情都没有成功测试。

最后我很高兴,

因为我可以访问会话及其所有宝贵的数据。

谢谢

Session 属性为 null 的原因是 MVC 函数呈现的实现方式 - 正在创建 HttpContext 的新实例来呈现函数。这个新的 HttpContext 用于运行 MVC 管道。

您可以在此处查看源代码:

https://github.com/Orckestra/C1-Packages/blob/master/Composite.AspNet.MvcFunctions/Composite.AspNet.MvcFunctions/FunctionProvider/MvcFunctionBase.cs#L165

也就是说,这是一个错误,对当前会话的引用没有传递到新的 HttpContext,我稍后会研究修复/更新包。

相关内容

  • 没有找到相关文章

最新更新