12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using Microsoft.AspNetCore.Http;
- using System.IO;
- using System.Threading.Tasks;
- namespace VCommon.VSwaggerUI.VAspNetCore
- {
- internal class SwaggerUiMiddleware
- {
- internal static ISwaggerUiResourceProvider ResourceProvider;
- internal static string BasePath;
- private readonly RequestDelegate _next;
- public SwaggerUiMiddleware(RequestDelegate next) => _next = next;
- public async Task Invoke(HttpContext context)
- {
- var requestPath = context.Request.Path.Value?.ToLower();
- if (requestPath?.StartsWith(BasePath) != true)
- {
- await _next.Invoke(context);
- return;
- }
- var path = requestPath.Substring(BasePath.Length);
- if (path == "/")
- {
- var qs = context.Request.QueryString.ToString();
- var html = ResourceProvider.GetIndex(qs.Length == 0 ? "api/" : qs.Substring(1));
- context.Response.ContentType = "text/html";
- await context.Response.WriteAsync(html);
- }
- else
- {
- var fileName = Path.GetFileName(path);
- var bin = ResourceProvider.GetBinResource(fileName);
- if (null == bin)
- {
- context.Response.StatusCode = 404;
- }
- else
- {
- if (Path.GetExtension(fileName).ToLower() == ".css")
- context.Response.ContentType = "text/css";
- await context.Response.Body.WriteAsync(bin);
- }
- }
- }
- }
- }
|