aspnet vNext ActionFilter和TempData

vfa*_*bre 5 c# asp.net-mvc asp.net-core

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

进入filterContext我有控制器但是是一个object而不是ControllerBase.我原以为是ControllerBase因为在以前版本的MVC中ControllerContext(基类ActionExecutingContext)是a ControllerBase,这里是codeplex中的源代码.我知道这可能是因为POCO控制器.

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

更新

如果在本博客文章中解释它,但是使用aspnet 5,我想实现.

Kir*_*lla 6

要从动作过滤器中访问TempData,您可以ITempDataDictionary从DI 调用服务.

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

注意:
默认情况下,TempData取决于Session功能(即TempData的数据存储在Session中),因此您需要很少的东西才能使其正常工作.

  • 参考Microsoft.AspNet.Session和Microsoft.Framework.Caching.Memory包.

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

    services.AddCaching();
    services.AddSession();
    
    Run Code Online (Sandbox Code Playgroud)
  • 在您的Configure方法中,注册Session中间件(这是为传入请求创建/附加会话的中间件)并在注册MVC 之前执行此操作.

    app.UseSession();
    app.UseMvc(...)
    
    Run Code Online (Sandbox Code Playgroud)