我正在尝试在aspnet vNext中创建一个ActionFilter。在这个过滤器中,我想要访问TempData和ViewData(在以前的版本中Controller中都可用)。我重写了方法
那么问题是,如果控制器是一个对象,如何访问TempData和ViewData?是否只需执行向下转换(例如
更新:
我想要实现的内容在这篇博客文章中已经解释了,但是使用的是aspnet 5。
public override void OnActionExecuting(ActionExecutingContext filterContext)
在filterContext
中,我有控制器,但它是一个object
而不是ControllerBase
。我期望得到一个ControllerBase
,因为在MVC的早期版本中,ControllerContext
(ActionExecutingContext
的基类)是一个ControllerBase
,这里是codeplex上的源代码。我理解这可能是由于POCO控制器。那么问题是,如果控制器是一个对象,如何访问TempData和ViewData?是否只需执行向下转换(例如
(Controller)filterContext.Controller
)或者有更好的方法?更新:
我想要实现的内容在这篇博客文章中已经解释了,但是使用的是aspnet 5。
TempData
可以通过DI中的ITempDataDictionary
服务进行访问。关于ViewData
,它可能取决于具体情况...如果你正在短路请求,那么你可以自己创建一个ViewDataDictionary
并在ViewResult
上设置ViewData
属性。或者,如果你只想向ViewData
添加数据,以便控制器的操作添加更多数据,那么我认为向下转换就可以了。 - Kiran