在Swagger中为.NET Core 3.1使用自定义索引

问题描述

通过网络搜索,我发现我可以用大张旗鼓替换index.html文件。我遵循大多数人所说的,可以用自定义文件替换索引文件。只需将index.html放置在您的项目中,将其标记为嵌入式资源,然后在Startup类的Configure函数中添加几行即可。

然后我从git项目(https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/index.html)复制了索引文件以对其进行修改。

我的自定义索引放在名为Swagger的文件夹下,并且加载良好。但是一旦我重新加载页面,我就会收到一个异常:“ ArgumentException:流不可读。”。

我的配置选项如下:

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);
});

我还尝试将index.html放在wwwroot文件夹下,并再次加载,但情况变得更糟。网站仅在JavaScript控制台上显示%(HeadContent),%(DocumentTitle)的标题和一些错误。

解决方法

问题是创建时要使用lambda表达式为IndexStream创建资源路径字符串。都是关于.net核心如何处理不同的api调用,以及它如何为每个调用构造对象。

我必须替换以下行:

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

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

通过这个:

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

关于将index.html放在wwwroot文件夹下,swagger似乎替换了该文件的某些文本,如果使用IndexStream函数引用了索引文件,则无法做到这一点。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...