Как присоединиться к родительской ветви из ветви, инициализированной с MapMiddlewarePost в ядре .net? - PullRequest
0 голосов
/ 01 апреля 2019

Если путь запроса совпадает с 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, поскольку это единственное промежуточное ПО в своем контексте, я бы хотел, чтобы конвейер продолжал с того места, где он остановился в основном конвейере промежуточного ПО.Я также натолкнулся на эту ссылку , которая объясняет в точности то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...