web-dev-qa-db-ja.com

.NET Core 3.0への移行後のSwaggerに関する問題

.NET Core 3.0に移行した後。 Swaggerの構成に問題があります。

以下は私の設定です。

  public void ConfigureServices(IServiceCollection services)
  {       

       services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0).AddNewtonsoftJson();


       services.AddSwaggerGen(setup =>
       {
             setup.SwaggerDoc(
                "v1", 
                 new Info 
                 {  
                     Title = "Docker", 
                     Version = "v1" 
                 });
        });
  }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
       Configuration.SwaggerOptions swaggerOptions = new Configuration.SwaggerOptions();

       _configuration.GetSection("SwaggerOptions").Bind(swaggerOptions);

       app.UseSwagger(options =>
       {
            options.RouteTemplate = swaggerOptions.JsonRoot;
       });

       app.UseSwaggerUI(options =>
       {
           options.SwaggerEndpoint(swaggerOptions.UiEndpoint, swaggerOptions.ApiDescription);
       });
}

以下は例外です

TypeLoadException:アセンブリ 'Microsoft.AspNetCore.Mvc.Formatters.Jsonからタイプ' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'を読み込めませんでした

これに対する解決策はありますか?

8
boris

これを議論するaspnet/AspNetCore github repoに関する議論があります: MvcJsonOptionsをASP.NET Core 3.0にフォワードタイプとして復元しますか?

問題が解決したことを示しています。

最新のSwashbuckle.AspnetCoreパッケージがインストールされていることを確認することをお勧めします: https://www.nuget.org/packages/Swashbuckle.AspNetCore/

公式のasp.netコアドキュメントには、次のように記載されています。

Install-Package Swashbuckle.AspNetCore -Version 5.0.0-rc2

https://docs.Microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.0&tabs=visual-studio

したがって、プレリリース版をインストールする必要があることをお勧めします。執筆時点では、4.Xのみが安定していて、5.0.0-rc3のみです。最新です。

13
Alex KeySmith

In Net Core 3.0:ReferenceLoopHandlingを構成しようとしていましたが、選択した回答が機能しなかったため、この代替案を見つけました。ConfigureServicesに次の行を追加してください:

public void ConfigureServices(IServiceCollection services)
{           
    services.AddMvc().AddNewtonsoftJson(options =>
    {
       options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    });
}
0
dayanrr91