【问题标题】:Issues with swagger after migrating to .NET Core 3.0迁移到 .NET Core 3.0 后招摇的问题
【发布时间】:2020-01-16 11:17:13
【问题描述】:

迁移到 .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.MvcJsonOptions” 'Microsoft.AspNetCore.Mvc.Formatters.Json

有解决办法吗?

【问题讨论】:

    标签: c# asp.net-core swagger .net-core-3.0 asp.net-core-3.0


    【解决方案1】:

    在 aspnet/AspNetCore github repo 上有一个讨论:Restore MvcJsonOptions to ASP.NET Core 3.0 as a type forward?

    这表明问题已解决。

    我建议确保您安装了最新的 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 是最新的。

    【讨论】:

    • 从 4 迁移到新的 5-RC 完美地为我解决了这个问题
    • 获取“找不到类型或命名空间名称‘信息’”错误。尝试安装 RC2、3 和 4。想法?
    • @inliner49er Info 对象已更改为 OpenApiInfoOpenApiInfo 的命名空间为 Microsoft.OpenApi.Models
    【解决方案2】:

    In Net Core 3.0: 我试图配置ReferenceLoopHandling,但对我来说,选择的答案不起作用,所以我找到了这个替代方案,请在 ConfigureServices 中添加:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2020-02-19
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多