aspnet vNext ActionFilter和TempData

时间:2015-05-25 06:56:07

标签: c# asp.net-mvc asp.net-core

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

进入filterContext我有控制器但是object而不是ControllerBase。我原以为ControllerBase,因为在以前版本的MVC中,ControllerContextActionExecutingContext的基类)是ControllerBasehere是源代码, CodePlex上。我知道这可能是因为POCO控制器。

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

更新

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

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