public static IApplicationBuilder UseDocs(this IApplicationBuilder app, DocsResource documentation) => app
 .UseMiddlewareLogging(typeof(DocsMiddleware))
 .MapWhen(
     HttpMethod.Get,
     inner => inner.UseAccept(
         Constants.MediaTypes.TextMarkdown,
         Constants.MediaTypes.JsonHyperSchema)
     .Use(Docs(documentation)))
 .UseAllowedMethods(documentation);
        private static MidFunc Docs(DocsResource documentation)
        {
            Task Docs(HttpContext context, Func <Task> next)
            {
                bool TryGetDocs(out Response value) =>
                (value = documentation.Get(
                     context.GetRouteData().GetDoc(),
                     context.Request.Headers["Accept"])) != null;

                return(!TryGetDocs(out var response)
                    ? next()
                    : context.WriteResponse(response));
            }

            return(Docs);
        }
Example #3
0
        private static Action <IApplicationBuilder> Configure(DocsResource documentation)
        {
            Task Docs(HttpContext context, Func <Task> next)
            {
                Response response;

                return(!context.Request.Path.StartsWithSegments("/docs", out var rel) ||
                       (response = documentation.Get(rel.Value.Remove(0, 1))) == null
                    ? next()
                    : context.WriteResponse(response));
            }

            return(builder => builder
                   .UseMiddlewareLogging(typeof(DocsMiddleware))
                   .MapWhen(HttpMethod.Get, inner => inner.UseAccept(Constants.MediaTypes.TextMarkdown).Use(Docs))
                   .UseAllowedMethods(documentation));
        }
Example #4
0
 public static IApplicationBuilder UseDocs(
     this IApplicationBuilder builder,
     DocsResource documentation)
 => builder.MapWhen(IsMatch, Configure(documentation));