public async Task Invoke(HttpContext context, RequestDelegate next) { string[] segments; var route = SelectRoute(context, out segments); if (route == null) { await next(context); } else { context.Response.StatusCode = 200; context.SetSegments(segments); try { if (route.Handler == null) { lock (route) { if (route.Handler == null) { route.Handler = HandlerBuilder.Build(route.Chain); } } } await route.Handler.Handle(context); } catch (Exception e) { context.RequestServices.GetService <ILogger <HttpContext> >().LogError(new EventId(500), e, "Request Failed"); context.Response.StatusCode = 500; await context.Response.WriteAsync(e.ToString()); } } }