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

1 asp.net-mvc-2 asp.net-core-mvc

每次查看基于_layout.cshtml的任何页面时,我都需要运行一些c#代码.我不想在每个controller.cs文件中添加一些东西,就像你曾经在ASP.NET的MasterPage.cs中使用的一样.

无法得到这个

在MVC,C#中的每个请求中运行一个方法?

或这个

Asp.Net Core中的@ Html.Action

运行,不知道是不是因为它们不是CORE 2.0.0,我只是遇到了很多编译错误.我想做的就是能够运行这样的代码

public class myClass {
    public static bool returnTrue() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

每次加载每个页面.

Ron*_*n C 7

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

  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
         }
  }
Run Code Online (Sandbox Code Playgroud)

然后在方法的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
 });
Run Code Online (Sandbox Code Playgroud)

然后,您可以在此ActionFilter中放置代码,该代码可以在每个操作方法之前运行,您可以在其中放置代码以在每个操作方法之后运行.查看代码注释.

通过context参数,您可以访问控制器,控制器名称,操作描述符,操作名称,请求对象(包括路径)等,因此有很多信息可供您确定要执行代码的页面. .我不知道一个特定的属性会告诉你页面是否正在使用,_layout.cshtml但你可能会根据我提到的其他属性推断出它.

请享用.