将中间件附加到 ASP.NET Core Web API 中的特定路由?

Attaching middleware to a specific route in ASP.NET Core Web API?

configure 中,我可以使用以下方法附加一个全局中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   ....
   app.UseMiddleware<MyMiddleware>();
   ...
}

这将适用于所有操作。

但是,我心想,如何将中间件附加到特定的 route/action? (当然我可以在代码中添加一些 if,但我不喜欢这种方法

但后来我看到了这个:

 app.UseEndpoints(endpoints =>
  {
      endpoints.Map("/version", endpoints.CreateApplicationBuilder()
               .UseMiddleware<MyMiddleware>()
               .UseMiddleware<VersionMiddleware>()
               .Build())
               .WithDisplayName("Version number"); 
  }

这会起作用,但会创建一个新端点 /version

问题

如何将自定义中间件附加到现有的控制器操作路由?

我试过:

endpoints.Map("/weatherforecast", endpoints.CreateApplicationBuilder()
    .UseMiddleware<MyMiddleware>()
    .UseMiddleware<VersionMiddleware>()
    .Build())
    .WithDisplayName("Version number");

不过好像没影响。我看到控制器的定期响应。没有中间件添加的新headers。

您需要地图

https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core

来自link,修改:

app.UseMiddlewareOne();

app.MapWhen(context => context.Request.Path.StartsWithSegments("/version", StringComparison.OrdinalIgnoreCase)), appBuilder =>
{
    appBuilder.UseMiddlewareTwo();
});

app.UseMiddlewareThree();