将中间件附加到 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();
在 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();