MVC CORE 2.0.0 运行 每个页面上的 c# 代码

MVC CORE 2.0.0 run c# code on every page

每次查看任何基于 _layout.cshtml 的页面时,我都需要 运行 一些 C# 代码。我不想在每个 controller.cs 文件中都放一些东西,只是像你以前在 ASP.NET 的 MasterPage.cs

中放一些东西

无法得到这个

Run a method in each request in MVC, C#?

或这个

@Html.Action in Asp.Net Core

到 运行,不确定是不是因为它们不是 CORE 2.0.0,我只是遇到很多编译错误。我想要做的就是能够运行一些这样的代码

public class myClass {
    public static bool returnTrue() {
        return true;
    }
}

每次加载每个页面时。

Filter 也可以,但进入 .Net Core 的正确方法是 Middleware。您可以阅读更多相关信息 here

如果它像您的示例一样简单,您可以使用 link 上的第一个示例,例如:

app.Use(async (context, next) =>
        {
            returnTrue();
            await next.Invoke();
        });

如果有帮助,请告诉我!

您可以使用操作过滤器来完成此操作

  public class GlobalFilter : IActionFilter{

         public void OnActionExecuting(ActionExecutingContext context) {
             //code here runs before the action method executes
         }

         public void OnActionExecuted(ActionExecutedContext context) {
              //code here runs after the action method executes
         }
  }

然后在 Startup.cs 文件中的 ConfigureServices 方法中连接 ActionFilter,如下所示:

services.AddScoped<GlobalFilter>();                //add it to IoC container.
services.AddMvc().AddMvcOptions(options => {
     options.Filters.AddService(typeof(GlobalFilter));  //Tell MVC about it
 });

然后你可以在这个 ActionFilter 中放置代码,它可以在每个操作方法之前 运行 并且你可以在每个操作方法之后将代码放在 运行 中。请参阅代码注释。

通过context参数可以访问Controller、Controller Name、Action Descriptor、Action Name、Request object(含路径)等信息,有很多信息可以供你使用确定要为哪个页面执行代码。我不知道具体的 属性 会告诉您页面是否正在使用 _layout.cshtml,但您可能可以根据我提到的其他属性推断出这一点。

尽情享受吧。