【发布时间】:2021-12-22 01:40:57
【问题描述】:
在configure 中,我可以使用以下方法附加一个全局中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
....
app.UseMiddleware<MyMiddleware>();
...
}
这将适用于所有操作。
但是,我心想,如何将中间件附加到特定的路由/操作? (当然我可以在代码中添加一些 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");
但似乎没有影响。我看到控制器定期响应。没有中间件添加的新标头。
【问题讨论】:
-
为什么不在那里创建通用中间件和过滤路由?
-
@zolty13 正如我所写:(当然我可以在代码中添加一些 if,但我不喜欢这种方法)。我相信还有另一种方式
-
@zolty13 我想知道,阅读链接中的答案,
app.UseRouter(BuildRouter(app));会覆盖所有其他路线吗?换句话说,它是添加还是替代?
标签: c# .net-core asp.net-core-webapi