微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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函数引用了索引文件,则无法做到这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。