基于这篇文章Make a Global ViewBag ,我正在尝试在 ASP.NET Core 2.2 中实现以下内容。我意识到原来的帖子是针对 MVC 3 的。
public class CompanyFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewBag.Company = "MyCompany";
}
}
我无法找到在哪个命名空间中定义filterContext.Controller.ViewBag。这在 ASP.NET Core 中仍然可用吗?
请您参考如下方法:
在 ASP.NET Core 中,可以定义不继承自 Controller
或 ControllerBase
的 Controller 类。因此,示例中的 filterContext.Controller
类型为 object
而不是 Controller
。但是,如果 Controller 实际上是 Controller
的实例,则只需强制转换 Controller
属性,然后相应地使用 ViewBag
即可。这是一个例子:
if (filterContext.Controller is Controller controller)
controller.ViewBag.Company = "MyCompany";
此处使用 is
是 pattern matching 的示例这是在 C# 7 中引入的。