我尝试在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。
非常简单的设置即可重现:
公共类启动 { 公共启动(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();
}
}
<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>
关于lib为什么找不到其中的swagger.json的任何想法?
答案 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;
});