Has anyone gotten swashbuckle to work with .net core 3 yet?

我的未来我决定 提交于 2019-12-10 15:28:22

问题


I'm trying to generate a swagger doc for my rest API. .net core 3. I've searched other questions on this here and can't seem to find any suggestions that work. The controller is VERY simple, no abstracts, generics, all methods have http attributes, etc.

I've tried swashbuckle v4 packages and also the v5 rc2 packages. the v4 packages just cause a runtime exception in .net core on load. the v5 packages always generate a null reference exception in the .json file. The controller is coded and works fine, was just adding documentation to it. Just wondering if swashbuckle works with .net core 3 yet.

//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"),
                }
            });
        });

and

// 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
});

on swagger page:

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

on json file itself:

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.b__2(string contentType) System.Linq.Enumerable.ToDictionary(IEnumerable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) System.Linq.Enumerable.ToDictionary(IEnumerable source, Func keySelector, Func elementSelector) Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponse(string statusCode, ApiResponseType apiResponseType, IEnumerable methodAttributes, SchemaRepository schemaRepository) Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponses(ApiDescription apiDescription, IEnumerable methodAttributes, SchemaRepository schemaRepository) Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository) Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable apiDescriptions, SchemaRepository schemaRepository) Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable 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) ``


回答1:


Try to:

  1. Exclude TermsOfService, Contact, License - from SwaggerDoc.
  2. Exclude RoutePrefix from UseSwaggerUI.



回答2:


Removing ArrayList from my source code solved the issue.

I found this out accidentally by making a code change to solve a completely unrelated issue, see:

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

😜



来源:https://stackoverflow.com/questions/57649146/has-anyone-gotten-swashbuckle-to-work-with-net-core-3-yet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!