【问题标题】:Not able to run Swagger UI无法运行 Swagger UI
【发布时间】:2023-03-20 08:58:01
【问题描述】:

我有一个 .NetCore Web API 项目。我正在尝试在上面使用 Swagger。 所有配置看起来都不错,但是当我运行我的项目时出现 404 错误,找不到页面。

这是我的代码:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton(_config);
        services.AddTransient<IRestHelper, RestHelper>();
        // Add framework services.
        services.AddApplicationInsightsTelemetry(_config);

        services.AddMvc();
        services.AddSwaggerGen(config =>
        {
            config.SwaggerDoc("v1", new Info { Title = "Slack Relay API", Version = "v1" });
        });
    }


     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(_config.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();

        app.UseApplicationInsightsExceptionTelemetry();
        app.UseMvc();
        app.UseSwagger(c =>
        {
            c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
        });

        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
        });
    }

我的 Web API 基本网址是:http://localhost:88/ 因此,当我尝试打开此 URL 时,我得到一个 404:http://localhost:88/swagger/ui

我使用的是 NetCore 1.0.1,在 project.json 中我有这一行来导入 Swagger: "Swashbuckle.AspNetCore": "1.0.0"

有什么帮助吗? 谢谢

【问题讨论】:

    标签: asp.net-web-api asp.net-core swagger swagger-ui asp.net-core-webapi


    【解决方案1】:

    您在浏览器中输入了错误的 URL。使用 Swagger 1.0.0 RTM,默认 url 从 http://localhost:88/swagger/ui 更改为 http://localhost:88/swagger

    【讨论】:

      【解决方案2】:

      您需要记住中间件的顺序很重要:MVC 中间件应该是最后一个,因为它会尝试处理所有请求。由于您没有将控制器的操作映射到/swagger/ui,您会收到 404 错误。修改Configure方法为:

          app.UseSwagger(c =>
          {
              c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
          });
      
          app.UseSwaggerUI(c =>
          {
              c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
          });
      
          app.UseMvc();
      

      此外,最好将 app.UseMvc() 替换为以下内容,这样 MVC 中间件就不会尝试处理任何与 swagger 相关的请求(对以 /swagger 开头的 URL 的请求):

      app.MapWhen(x => !x.Request.Path.Value.StartsWith("/swagger"), builder =>
      {
          builder.UseMvc();
      });
      

      【讨论】:

      • 谢谢。这是多余的,我确实做了你提到的更改,但仍然无法正常工作。这个 url 显示了 Swagger localhost:88/swagger/v1/swagger.json 的 json。那么拿到json就意味着配置做好了吗?但我仍然有这个网址的 404 localhost:88/swagger/ui 。有什么想法吗?
      • 感谢您和其他回复,我的工作正常了。我想提出两个正确的回应,但看起来不可能。非常感谢!
      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2018-02-12
      相关资源
      最近更新 更多