为什么将swagger.json作为应用程序托管在IIS上的网站下时找不到错误?

时间:2019-09-05 18:37:44

标签: c# .net swagger asp.net-core-webapi swashbuckle

我尝试在Netcore 2.2中同时使用Swashbuckle.AspNetCore 5.0.0-rc2和4.0.1创建一个Webapi,问题是相同的。它可以在本地计算机上运行,​​但是当我编译发行版并部署到IIS时,我输入了站点http://localhost/mysite/和错误消息:

  

未找到提取错误/swagger/v1/swagger.json

另外,在浏览器中,如果我输入http://localhost/mysite/swagger/v1/swagger.json,我会在OpenApi中看到一个Json。

非常简单的设置即可重现:

  1. 创建一个新的webapi项目。
  2. 安装swashbuckle.aspnetcore 5.0.0-rc2
  3. 更改startup.cs:

公共类启动     {         公共启动(IConfiguration配置)         {             配置=配置;         }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            c.RoutePrefix = string.Empty;
        });

        app.UseMvc();
    }
}
  1. 将.csproj更改为具有以下指令:
 <Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <!-- Enables XML comments on Swagger-UI -->
  <PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <NoWarn>$(NoWarn);1591</NoWarn>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc2" />
  </ItemGroup>
 </Project>
  1. 部署到IIS并创建一个应用程序池。

关于lib为什么找不到其中的swagger.json的任何想法?

1 个答案:

答案 0 :(得分:1)

对于swagger.json,您需要像SwaggerEndpoint一样在c.SwaggerEndpoint("/mysite/swagger/v1/swagger.json", "My API V1");之前附加网站。如您所见,您的swagger.json位于http://localhost/mysite/swagger/v1/swagger.json下,而不是http://localhost/swagger/v1/swagger.json下。

尝试像

那样更改您的配置
        app.UseSwaggerUI(c =>
        {
#if DEBUG
               // For Debug in Kestrel
               c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
#else
               // To deploy on IIS
               c.SwaggerEndpoint("/mysite/swagger/v1/swagger.json", "Web API V1");
#endif
            c.RoutePrefix = string.Empty;
        });
相关问题