Buscando en la web encontré que puedo reemplazar el archivo index.html en swagger. Sigo lo que dice la mayoría de la gente y podría reemplazar el archivo de índice por uno personalizado. Simplemente coloque un index.html en algún lugar de su proyecto, márquelo como recurso incrustado y agregue algunas líneas en la función Configurar en la clase de inicio.

Luego copié el archivo de índice del proyecto git (https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/index.html) para modificarlo.

Mi índice personalizado se coloca en una carpeta llamada Swagger y se carga bien. Pero una vez que vuelvo a cargar la página, aparece una excepción: "ArgumentException: Stream no se puede leer".

Mis opciones de configuración se ven así:

string path = GetType().Namespace + ".Swagger.index.html";
var resource = GetType().Assembly.GetManifestResourceStream(path);

app.UseSwagger(config => { config.RouteTemplate = $"{doc_path}/{{documentName}}/{doc_file}"; });
app.UseSwaggerUI(config =>
{
    config.RoutePrefix = doc_path;
    config.SwaggerEndpoint($"{doc_vers}/{doc_file}", "Rest API Doc");
    config.InjectStylesheet($"style.css");
    config.IndexStream = () => resource);
});

También intenté colocar index.html en la carpeta wwwroot, y se carga de nuevo, pero empeora. El sitio web solo muestra% (HeadContent),% (DocumentTitle) para el título y algunos errores en la consola de JavaScript.

0
Antonio Rodríguez 24 ago. 2020 a las 15:53

1 respuesta

La mejor respuesta

El problema era que la creación de la cadena de ruta de recursos a partir de la expresión lambda para IndexStream. Se trata de cómo .net core maneja diferentes llamadas a la API y cómo construye objetos para cada llamada.

Tengo que reemplazar estas líneas:

string path = GetType().Namespace + ".Swagger.index.html";
var resource = GetType().Assembly.GetManifestResourceStream(path);

app.UseSwaggerUI(config =>
{
    -- some code here
    config.IndexStream = () => resource);
});

Por esto:

app.UseSwaggerUI(config =>
{
    -- some code here
    config.IndexStream = () => GetType().Assembly.GetManifestResourceStream
    (
            GetType().Namespace + ".Swagger.index.html")
    );
});

Acerca de colocar index.html en la carpeta wwwroot, swagger parece reemplazar algo de texto para el archivo, y no puede hacerlo si se hace referencia al archivo de índice usando la función IndexStream.

1
Antonio Rodríguez 24 ago. 2020 a las 12:59