Swagger UI中无法读取文件问题


70

我已经在应用程序中加入了swagger UI。

当我尝试查看swagger UI时,可以很好地获取API文档,但过一会儿,按钮上会显示一些错误图标。

错误消息如下所示:

[{“ level”:“错误”,“ message”:“无法从文件http:// MYIP / swagger / docs / v1 ”}中读取 ]

我不确定是什么原因造成的。如果我刷新它,它会在几秒钟后显示错误。

Answers:


97

我猜想“ http:// MYIP / swagger / docs / v1 ”不能公开访问。

默认情况下,swagger ui使用在线验证器:online.swagger.io。如果它无法访问您的招摇网址,那么您将看到该错误消息。

可能的解决方案:

  1. 禁用验证:

    config.EnableSwagger().EnableSwaggerUi(c => c.DisableValidator());

  2. 使您的网站可公开访问

  3. 在本地托管验证器:

您可以从以下网址获取验证器:https//github.com/swagger-api/validator-badge#running-locally

您还需要告诉swaggerui验证器的位置

config.EnableSwagger().EnableSwaggerUi(c => c.SetValidatorUrl(<validator_url>));


3
您能告诉我们在哪个文件中可以将验证器配置为禁用吗?
shashi009

3
这取决于您使用的框架。例如,在Startup.cs中使用Web Api 2: public void Configuration(IAppBuilder app) { ... HttpConfiguration config = new HttpConfiguration(); SwaggerConfig.Register(config); } 然后可以在SwaggerConfig.cs中配置验证器
Jon R

对于下一个人-当我下载并在本地运行验证程序徽章时,我发现我的招摇json是有效的。错误是因为我的swagger.json不能远程使用(这是我[并且可能是您想要的])。
Ryan Shillington

1
配置文件位于\ App_Start \ SwaggerConfig.cs可用。
Vijai

如果我使用swagger ui的公开提供的docker镜像,是否有机会解决此问题?
Gunslinger '18

18

为了补充已接受的答案...我只是在SwaggerConfig.cs中取消注释了一行。我只想通过禁用验证器来摆脱主要的swagger页面上的红色错误。

// By default, swagger-ui will validate specs against swagger.io's online validator and display the result
// in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
// feature entirely.
//c.SetValidatorUrl("http://localhost/validator");
c.DisableValidator();

1
感谢分享 !
Harmeet Singh Bhamra

在哪里可以找到swagger配置?
An-droid

我将Swashbuckle NuGet包用于Swagger,并将SwaggerConfig.cs放入App_Start文件夹下。
贾斯汀·帕瓦特

配置文件位于。\ App_Start \ SwaggerConfig.cs中
-Vijai,

7

如果您使用的是swagger-uigithub存储库中的文件,则可以通过在index.html文件中设置validatorUrl来禁用文件中的模式验证null

window.onload = function() {

  // Build a system
  const ui = SwaggerUIBundle({
    url: "/docs/open_api.json",
    dom_id: '#swagger-ui',

    validatorUrl : null,   # <----- Add this line

    deepLinking: true,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
  })

这正是我需要的解决方案。谢谢。
Melloware


1

设置this.model.validatorUrl = null;dist/swagger-ui.js为我工作..

// Default validator
if(window.location.protocol === 'https:') {
  //this.model.validatorUrl = 'https://online.swagger.io/validator';
  this.model.validatorUrl = null;
} else {
  //this.model.validatorUrl = 'http://online.swagger.io/validator';
  this.model.validatorUrl = null;
}

0

对于使用Swashbuckle.OData时遇到类似问题的任何人:

我在将Swagger与我们的OData端点集成时遇到问题(将ODataController用于API和Swashbuckle.OData NuGet包)。我必须为此编写自己的文档过滤器并添加它:

GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "OurSolution.API");
                    c.DocumentFilter<SwaggerDocumentFilter>();
                    //c.CustomProvider((defaultProvider) => new ODataSwaggerProvider(defaultProvider, c, GlobalConfiguration.Configuration));
                    c.IncludeXmlComments(GetXmlCommentsPath());
                    c.UseFullTypeNameInSchemaIds();
                    c.RootUrl(req => ConfigurationManager.AppSettings["AppUrl"]);
                })
            .EnableSwaggerUi(c =>
            {
                c.DisableValidator();
            });

显然为了避免验证错误,我不得不注释掉设置ODataSwaggerProvider的行并关闭了以上文章中提到的验证器。这使得Swashbuckle.OData的实用性值得怀疑,但我没有测试它与香草Swashbuckle一起使用的功能。

注意:我使用了GitHub页面上描述的Swashbuckle.OData方法,但是它不起作用:根本没有显示任何可能的端点。也许有人知道更好的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.