有没有人敢于使用 .NET Core 3?
Has anyone gotten swashbuckle to work with .NET Core 3 yet?
我正在尝试使用 .NET Core 3 为我的休息 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
});
在 swagger 页面上:
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)
尝试:
- 从 SwaggerDoc 中排除服务条款、联系方式、许可。
- 从 UseSwaggerUI 中排除 RoutePrefix。
从我的源代码中删除 ArrayList 解决了这个问题。
我通过更改代码来解决一个完全不相关的问题而无意中发现了这一点,请参阅:
Serializing to XML ArrayList<T> in .NET Core 3
我正在尝试使用 .NET Core 3 为我的休息 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
});
在 swagger 页面上:
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)
尝试:
- 从 SwaggerDoc 中排除服务条款、联系方式、许可。
- 从 UseSwaggerUI 中排除 RoutePrefix。
从我的源代码中删除 ArrayList 解决了这个问题。
我通过更改代码来解决一个完全不相关的问题而无意中发现了这一点,请参阅:
Serializing to XML ArrayList<T> in .NET Core 3