aspnet vNext ActionFilter 和 TempData

aspnet vNext ActionFilter and TempData

我正在尝试在 aspnet vNext 中创建一个 ActionFilter。在此过滤器中,我想访问 TempData 和 ViewData(两者都在以前版本的 Controller 中可用)。我覆盖了该方法 public override void OnActionExecuting(ActionExecutingContext filterContext)

进入filterContext我有控制器但是object instead of ControllerBase. I was expected a ControllerBase because in previous versions of MVC the ControllerContext (the base class of ActionExecutingContext) was a ControllerBase, here是codeplex中的源代码。我知道这可能是因为 POCO 控制器。

所以,问题是,如果控制器是一个对象,如何访问TempData 和ViewData。简单地做一个向下转换(像这样 (Controller)filterContext.Controller)或者有一个最好的方法。

更新

如果在 this blog post 中解释它,但使用 aspnet 5,我想实现。

要从操作过滤器中访问 TempData,您可以从 DI 获取名为 ITempDataDictionary 的服务。

要从 DI 获得此服务,您可以在 OnActionExecuting 方法中执行类似 actionContext.HttpContext.RequestServices.GetRequiredService<ITempDataDictionary>() 的操作。如果您愿意,也可以使用 ServiceFilterAttribute.

构造注入

注意:
默认情况下,TempData 依赖于 Session 特性(即 TempData 的数据存储在 Session 中),因此您需要做一些事情才能使其正常工作。

  • 参考Microsoft.AspNet.SessionMicrosoft.Framework.Caching.Memory包。

  • 在您的 ConfigureServices 方法中,执行以下操作:

    services.AddCaching();
    services.AddSession();
    
  • 在您的 Configure 方法中,注册 Session 中间件(这是 creates/attaches 传入请求的会话)并执行 注册 MVC 之前。

    app.UseSession();
    app.UseMvc(...)