Example #1
0
        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());
                }
            }
        }