【问题标题】:Has anyone gotten swashbuckle to work with .NET Core 3 yet?有没有人在使用 .NET Core 3 时变得花哨?
【发布时间】:2019-12-30 03:04:12
【问题描述】:

我正在尝试使用 .NET Core 3 为我的 rest API 生成一个 swagger 文档。我在这里搜索了其他问题,似乎找不到任何可行的建议。控制器非常简单,没有抽象、泛型,所有方法都有http属性等。

我试过 swashbuckle v4 包和 v5 rc2 包。 v4 包只会在加载时在 .net 核心中导致运行时异常。 v5 包始终在 .json 文件中生成空引用异常。控制器已编码并且工作正常,只是向其中添加了文档。只是想知道 swashbuckle 是否适用于 .net core 3。

//Register the Swagger generator, defining one or more Swagger documents
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "SimpleRESTServer-mySQL",
                Description = "A simple example ASP.NET Core REST API using mySql",
                TermsOfService = new Uri("https://example.com/terms"),
                Contact = new OpenApiContact
                {
                    Name = "blah blah",
                    Email = string.Empty,
                    Url = new Uri("https://example.com"),
                },
                License = new OpenApiLicense
                {
                    Name = "Use under LICX",
                    Url = new Uri("https://example.com/license"),
                }
            });
        });

// Register the Swagger generator and the Swagger UI middlewares
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint.
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "SimpleRESTServer-mySQL");
c.RoutePrefix = ""; // make default home page load the swagger doc
});

在招摇页面上:

Failed to load API definition.
Errors
Hide 
Fetch errorInternal Server Error /swagger/v1/swagger.json

关于 json 文件本身:

NullReferenceException: Object reference not set to an instance of an object.
Swashbuckle.AspNetCore.SwaggerGen.TypeExtensions.IsNullable(Type type)
Swashbuckle.AspNetCore.SwaggerGen.SchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ArraySchemaGenerator.GenerateSchemaFor(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.ChainableSchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SchemaGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateResponseMediaType(Type type, SchemaRepository schemaRespository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator+<>c__DisplayClass19_0.<GenerateResponse>b__2(string contentType)
System.Linq.Enumerable.ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer)
System.Linq.Enumerable.ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponse(string statusCode, ApiResponseType apiResponseType, IEnumerable<object> methodAttributes, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponses(ApiDescription apiDescription, IEnumerable<object> methodAttributes, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable<ApiDescription> apiDescriptions, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable<ApiDescription> apiDescriptions, SchemaRepository schemaRepository)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(string documentName, string host, string basePath)
Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.SetRoutingAndContinue(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

【问题讨论】:

  • 我也试过 NSwag.AspNetCore,效果很好(同样的控制器代码)。

标签: .net-core swashbuckle


【解决方案1】:

从我的源代码中删除 ArrayList 解决了这个问题。

我通过更改代码来解决一个完全不相关的问题偶然发现了这一点,请参阅:

Serializing to XML ArrayList<T> in .NET Core 3

?

【讨论】:

    【解决方案2】:

    尝试:

    1. 从 SwaggerDoc 中排除服务条款、联系人、许可。
    2. 从 UseSwaggerUI 中排除 RoutePrefix。

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2020-06-13
      相关资源
      最近更新 更多