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

时间:2016-12-14 15:56:11

标签: asp.net-web-api asp.net-core middleware

我尝试在macOS上创建一个asp.net核心web 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请求时,它与控制器请求不匹配。中间件类被调用。

如何设置只在mvc-request上调用中间件类。

1 个答案:

答案 0 :(得分:1)

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

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

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

PS :您需要安装此软件包(Microsoft.AspNetCore.Mvc.Core

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