ASP.NET 核心 - MVC 上的中间件

ASP.NET core - middleware on MVC

我尝试在 macOS 上创建一个 asp.net 核心网站 api。

但是我的中间件没有在 mvc-call 上调用。

我的配置:

   public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, BackendDbContext context)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        //app.UseStaticFiles();

        app.UseMvc();
        app.UseMiddleware<AuthMiddleware>();

        BackendDbInitializer.Init(context);
    }

还有我的中间件:

public class AuthMiddleware 
{
    private readonly RequestDelegate _next;

    public AuthMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Console.WriteLine("Invoke......................");

        await _next.Invoke(context);
    }
}

当我发出 HTTP 请求时,它与控制器请求不匹配。中间件 class 被调用。

我如何设置中间件 class 仅在 mvc 请求时被调用。

您可以将中间件用作 MVC 过滤器:

public class HomeController : Controller
{
    [MiddlewareFilter(typeof(AuthMiddleware))]
    public IActionResult Index()  
    {
        return View();
    }
}

在这种情况下,每次调用操作方法 Index 时,AuthMiddleware 将 运行。

PS: 你需要安装这个包(Microsoft.AspNetCore.Mvc.Core)

more info(请参阅作为 MVC 过滤器的中间件部分)