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.Session
和Microsoft.Framework.Caching.Memory
包。
在您的 ConfigureServices
方法中,执行以下操作:
services.AddCaching();
services.AddSession();
在您的 Configure
方法中,注册 Session
中间件(这是 creates/attaches 传入请求的会话)并执行 在 注册 MVC 之前。
app.UseSession();
app.UseMvc(...)
我正在尝试在 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.Session
和Microsoft.Framework.Caching.Memory
包。在您的
ConfigureServices
方法中,执行以下操作:services.AddCaching(); services.AddSession();
在您的
Configure
方法中,注册Session
中间件(这是 creates/attaches 传入请求的会话)并执行 在 注册 MVC 之前。app.UseSession(); app.UseMvc(...)