[英]Swagger UI not displaying when deploying API on IIS
好吧,我将 Swagger 用于我的 API 文档,它在 localhost 中完美运行,当我将它托管在 IIS 上时,问题就开始了。 由于某种原因,它不再起作用了
本地主机:
https://localhost:44381/swagger/index.html
api:
http://200.155.29.14/SimuladorFrete/Swagger/index.html
当我在 ISS 中部署 Swagger 后尝试打开它时,我得到的只是一个空白页和一个 500 内部服务器错误,这并没有说明异常。
这是我的配置方法(startup.cs)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseStaticFiles();
app.UseSwaggerUI(c =>
{
if (env.IsDevelopment())
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
}
else
{
// To deploy on IIS
c.SwaggerEndpoint("/SimulaFrete/swagger/v1/swagger.json", "Web API V1");
}
});
}
这是我的 ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddNewtonsoftJson();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
new OpenApiInfo
{
Title = "Simulador de frete por Unidade",
Version = "v1",
Description = "Métodos da API de simulação de frete",
Contact = new OpenApiContact
{
Name = "Catalde Technology",
Url = new Uri("https://www.catalde.com"),
Email = "cicero.catalde@catalde.com"
}
});
string caminhoAplicacao =
PlatformServices.Default.Application.ApplicationBasePath;
string nomeAplicacao =
PlatformServices.Default.Application.ApplicationName;
string caminhoXmlDoc =
Path.Combine(caminhoAplicacao, $"{nomeAplicacao}.xml");
c.IncludeXmlComments(caminhoXmlDoc);
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
});
}
还有我的 Controller 代码只有这个方法:
[HttpPost]
public ContentResult Post([FromBody]dadosFrete xml)
{
// code logic
}
您需要在您的条件中临时添加生产子句,然后才能在生产环境中看到 swagger。 请参阅附图中黄色突出显示的部分。 env.IsProduction()
尝试这个。 设置相对路径。
app.UseSwaggerUI(c =>
{
string swaggerJsonBasePath = string.IsNullOrWhiteSpace(c.RoutePrefix) ? "." : "..";
c.SwaggerEndpoint($"{swaggerJsonBasePath}/swagger/v1/swagger.json", "My API");
});
如果此解决方案不起作用。 然后检查发布设置。 问题是使用-r Release运行dotnet publish不会生成 XML 文件。 但是,带有-r Debug的dotnet publish实际上会生成该文件。 这解释了为什么人们只有在部署到本地环境以外的环境时才会遇到这个问题。 您可以在Project > Your Project properties > Build Tab中简化查找
看看如何在.net内核中使用多个环境。 一些选项是
launch.json
文件(仅限本地开发)ASPNETCORE_ENVIRONMENT
的环境变量,包括development
、 stage
或production
web.config
部署到 IIS 并添加值<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
对于 IIS,这一切都取决于 IIS 的版本。 旧版本的IIS,相信你只能用go和web.config。
只需编辑您的 csproj 文件并添加以下代码段
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
以下对我有用。 我能够让它在 IIS 上本地工作。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.UseSwaggerUI(c =>
{
string swaggerJsonBasePath = string.IsNullOrWhiteSpace(c.RoutePrefix) ? "." : "..";
c.SwaggerEndpoint($"{swaggerJsonBasePath}/swagger/v1/swagger.json", "Web API");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.