private static void HandleSwagger(IApplicationBuilder app) { app.Run(async context => { var handlers = ServiceLocator.GetService <Built.Grpcc.ServiceDescriptor>(); var builder = new SwaggerDefinitionBuilder(new SwaggerOptions("t", "d", "") { }, context, handlers); var bytes = builder.BuildSwaggerJson(); context.Response.Headers["Content-Type"] = new[] { "application/json" }; context.Response.StatusCode = 200; await context.Response.Body.WriteAsync(bytes, 0, bytes.Length); }); }
public async Task Invoke(HttpContext httpContext) { // reference embedded resouces const string prefix = "ConsoleAppFramework.WebHosting.Swagger.SwaggerUI."; var path = httpContext.Request.Path.Value.Trim('/'); if (path == "") { path = "index.html"; } var filePath = prefix + path.Replace("/", "."); var mediaType = GetMediaType(filePath); if (path.EndsWith(options.JsonName)) { var builder = new SwaggerDefinitionBuilder(options, httpContext, handlers); var bytes = builder.BuildSwaggerJson(); httpContext.Response.Headers["Content-Type"] = new[] { "application/json" }; httpContext.Response.StatusCode = 200; await httpContext.Response.Body.WriteAsync(bytes, 0, bytes.Length); return; } var myAssembly = typeof(ConsoleAppFrameworkSwaggerMiddleware).GetTypeInfo().Assembly; using (var stream = myAssembly.GetManifestResourceStream(filePath)) { if (options.ResolveCustomResource == null) { if (stream == null) { // not found, standard request. await next(httpContext); return; } httpContext.Response.Headers["Content-Type"] = new[] { mediaType }; httpContext.Response.StatusCode = 200; var response = httpContext.Response.Body; await stream.CopyToAsync(response); } else { byte[] bytes; if (stream == null) { bytes = options.ResolveCustomResource(path, null); } else { using (var ms = new MemoryStream()) { await stream.CopyToAsync(ms); bytes = options.ResolveCustomResource(path, ms.ToArray()); } } if (bytes == null) { // not found, standard request. await next(httpContext); return; } httpContext.Response.Headers["Content-Type"] = new[] { mediaType }; httpContext.Response.StatusCode = 200; var response = httpContext.Response.Body; await response.WriteAsync(bytes, 0, bytes.Length); } } }
public async Task Invoke(HttpContext httpContext) { if (httpContext.Request.Path.Value.Equals(options.JsonName)) { var builder = new SwaggerDefinitionBuilder(options, httpContext, GrpcServiceMethodFactory.Handers); var bytes = builder.BuildSwaggerJson(); httpContext.Response.Headers["Content-Type"] = new[] { "application/json" }; httpContext.Response.StatusCode = 200; httpContext.Response.Body.Write(bytes, 0, bytes.Length); return; } else { if (_next != null) { await _next(httpContext); } return; } //// reference embedded resouces //const string prefix = "Built.Grpc.HttpGateway.swagger.ui_3._18._1."; ////Type type = MethodBase.GetCurrentMethod().DeclaringType; ////string _namespace = type.Namespace; //var path = httpContext.Request.Path.Value.Trim('/'); //if (path == "") path = "index.html"; //var filePath = prefix + path.Replace("/", "."); //var mediaType = GetMediaType(filePath); //var myAssembly = typeof(SwaggerMiddleware).GetTypeInfo().Assembly; //using (var stream = myAssembly.GetManifestResourceStream(filePath)) //{ // if (options.ResolveCustomResource == null) // { // if (stream == null) // { // // not found, standard request. // return _next(httpContext); // } // httpContext.Response.Headers["Content-Type"] = new[] { mediaType }; // httpContext.Response.StatusCode = 200; // var response = httpContext.Response.Body; // stream.CopyTo(response); // } // else // { // byte[] bytes; // if (stream == null) // { // bytes = options.ResolveCustomResource(path, null); // } // else // { // using (var ms = new MemoryStream()) // { // stream.CopyTo(ms); // bytes = options.ResolveCustomResource(path, ms.ToArray()); // } // } // if (bytes == null) // { // // not found, standard request. // return _next(httpContext); // } // httpContext.Response.Headers["Content-Type"] = new[] { mediaType }; // httpContext.Response.StatusCode = 200; // var response = httpContext.Response.Body; // response.Write(bytes, 0, bytes.Length); // } //} //return EmptyTask; }