Roy*_*mir 3 c# .net-core asp.net-core-webapi
在 内部configure,我可以使用以下方法附加一个全局中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
....
app.UseMiddleware<MyMiddleware>();
...
}
Run Code Online (Sandbox Code Playgroud)
这将适用于所有操作。
但是,我想,如何将中间件附加到特定的路由/操作?(当然我可以在代码中添加一些 if,但我不喜欢这种方法)
但后来我看到了这个:
app.UseEndpoints(endpoints =>
{
endpoints.Map("/version", endpoints.CreateApplicationBuilder()
.UseMiddleware<MyMiddleware>()
.UseMiddleware<VersionMiddleware>()
.Build())
.WithDisplayName("Version number");
}
Run Code Online (Sandbox Code Playgroud)
这可以工作,但会创建一个新的端点/version。
问题
如何将自定义中间件附加到现有控制器操作路由?
我试过了:
endpoints.Map("/weatherforecast", endpoints.CreateApplicationBuilder()
.UseMiddleware<MyMiddleware>()
.UseMiddleware<VersionMiddleware>()
.Build())
.WithDisplayName("Version number");
Run Code Online (Sandbox Code Playgroud)
但似乎并不影响。我看到管制员定期回复。没有中间件添加的新标头。
当你需要地图时
https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core
来自链接,修改:
app.UseMiddlewareOne();
app.MapWhen(context => context.Request.Path.StartsWithSegments("/version", StringComparison.OrdinalIgnoreCase)), appBuilder =>
{
appBuilder.UseMiddlewareTwo();
});
app.UseMiddlewareThree();
Run Code Online (Sandbox Code Playgroud)