ASP.NET Core筛选器中的ViewBag

ffe*_*urb 5 c# asp.net-core

基于这篇文章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";
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法在哪个名称空间中定义filterContext.Controller.ViewBag。在ASP.NET Core中仍然可用吗?

Kir*_*kin 8

在 ASP.NET Core 中,可以定义一个不继承自 或 的控制器ControllerControllerBase。因此,filterContext.Controller在您的示例中,是类型object而不是Controller. 但是,如果控制器实际上是 的实例Controller,您只需转换该Controller属性,然后ViewBag相应地使用即可。这是一个例子:

if (filterContext.Controller is Controller controller)
    controller.ViewBag.Company = "MyCompany";
Run Code Online (Sandbox Code Playgroud)

这里使用的是C# 7 中引入的模式匹配is的示例。