Если путь запроса совпадает с foo/bar/v1/{accountId}
, промежуточное программное обеспечение TraceIdMiddleware
никогда не вызывается.
public void Configure(IApplicationBuilder app)
{
var routeBuilder = new RouteBuilder(app);
routeBuilder.MapMiddlewarePost("foo/bar/v1/{accountId}",
builder =>
{
builder.UseMiddleware<RegularMiddleware>();
});
app.UseMiddleware<LoggingContextMiddleware>();
app.UseCors(b => b.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
app.UseRouter(routeBuilder.Build());
app.UseMiddleware<TraceIdMiddleware>();
}
Потому что, когда я проверил RouterMiddleware
с помощью Microsoft , я вижу, что next не вызывается для сопоставленного пути:
public async Task Invoke(HttpContext httpContext)
{
RouteContext context = new RouteContext(httpContext);
context.RouteData.Routers.Add(this._router);
await this._router.RouteAsync(context);
if (context.Handler == null)
{
this._logger.RequestDidNotMatchRoutes();
await this._next(httpContext);
}
else
{
httpContext.Features[typeof (IRoutingFeature)] = (object) new RoutingFeature()
{
RouteData = context.RouteData
};
await context.Handler(context.HttpContext);
}
}
Даже если яВызовите next
в RegularMiddleware
, поскольку это единственное промежуточное ПО в своем контексте, я бы хотел, чтобы конвейер продолжал с того места, где он остановился в основном конвейере промежуточного ПО.Я также натолкнулся на эту ссылку , которая объясняет в точности то же самое.