Skip to main content
 首页 » 编程设计

c#之ASP.NET Core 过滤器内的 ViewBag

2024年05月10日12yxwkf

基于这篇文章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 中,可以定义不继承自 ControllerControllerBase 的 Controller 类。因此,示例中的 filterContext.Controller 类型为 object 而不是 Controller。但是,如果 Controller 实际上是 Controller 的实例,则只需强制转换 Controller 属性,然后相应地使用 ViewBag 即可。这是一个例子:

if (filterContext.Controller is Controller controller) 
    controller.ViewBag.Company = "MyCompany"; 

此处使用 ispattern matching 的示例这是在 C# 7 中引入的。