如何解决在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 举报,一经查实,本站将立刻删除。