簡體   English   中英

在 IIS 上部署 API 時,Swagger UI 不顯示

[英]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 Debugdotnet publish實際上會生成該文件。 這解釋了為什么人們只有在部署到本地環境以外的環境時才會遇到這個問題。 您可以在Project > Your Project properties > Build Tab中簡化查找

看看如何在.net內核中使用多個環境 一些選項是

  • 為您的不同環境(dev/stage/prod)使用launch.json文件(僅限本地開發)
  • 添加名為ASPNETCORE_ENVIRONMENT的環境變量,包括developmentstageproduction
  • 或者制作一個web.config部署到 IIS 並添加值
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

對於 IIS,這一切都取決於 IIS 的版本。 舊版本的IIS,相信你只能用go和web.config。

只需編輯您的 csproj 文件並添加以下代碼段

<PropertyGroup>
 <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

以下對我有用。 我能夠讓它在 IIS 上本地工作。

  1. 您需要將項目發布到一個文件夾並將 IIS 指向該文件夾。
  2. 編輯 Configure 方法,將 Swagger 移出 env.IsDevelopment 並使用上面 vipul 的解決方案修復路徑。
 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM