rbeauchamp / Swashbuckle.OData

Extends Swashbuckle with OData v4 support!
Other
128 stars 96 forks source link

Swashbuckle.OData.Core throws Specified argument was out of the range of valid values exception and failing to generate swagger ui #192

Closed gkiran1 closed 4 years ago

gkiran1 commented 5 years ago

I am planning to integrate Swagger UI for my OData services. I have configured my SwaggerConfig.cs accrodingly. My environment details as below:

Below exception is being thrown: 500 : {"Message":"An error has occurred.","ExceptionMessage":"Specified argument was out of the range of valid values.\r\nParameter name: TypeKind","ExceptionType":"System.ArgumentOutOfRangeException","StackTrace":" at Swashbuckle.OData.Descriptions.ODataSwaggerUtilities.SetSwaggerType(Parameter parameter, IEdmType edmType)\r\n at Swashbuckle.OData.Descriptions.ODataSwaggerUtilities.SetSwaggerType(Parameter parameter, IEdmType edmType)\r\n at Swashbuckle.OData.Descriptions.ODataSwaggerUtilities.Parameter(IList1 parameters, String name, String kind, String description, IEdmType type, Boolean isRequired)\r\n at Swashbuckle.OData.Descriptions.ODataSwaggerUtilities.AddSwaggerParametersForFunction(List1 swaggerParameters, IEdmOperation operation)\r\n at Swashbuckle.OData.Descriptions.ODataSwaggerUtilities.CreateSwaggerPathForOperationOfEntitySet(IEdmOperation operation, IEdmEntitySet entitySet, ODataRoute oDataRoute)\r\n at Swashbuckle.OData.Descriptions.EntityDataModelRouteGenerator.<>c__DisplayClass5_1.<GenerateOperationRoutes>b__3(IEdmEntitySet entitySet)\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()\r\n at System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable1 collection)\r\n at System.Collections.Generic.List1.AddRange(IEnumerable1 collection)\r\n at Swashbuckle.OData.Descriptions.EntityDataModelRouteGenerator.GenerateOperationRoutes(ODataRoute oDataRoute)\r\n at Swashbuckle.OData.Descriptions.EntityDataModelRouteGenerator.Generate(ODataRoute oDataRoute)\r\n at System.Linq.Enumerable.d17`2.MoveNext()\r\n at System.Linq.Enumerable.d172.MoveNext()\r\n at System.Linq.Enumerable.<SelectManyIterator>d__172.MoveNext()\r\n at System.Linq.Enumerable.d17`2.MoveNext()\r\n at System.Linq.Enumerable.d641.MoveNext()\r\n at System.Linq.Enumerable.<SelectManyIterator>d__172.MoveNext()\r\n at System.Collections.Generic.List1..ctor(IEnumerable1 collection)\r\n at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)\r\n at Swashbuckle.OData.CollectionExtentions.ToCollection[T](IEnumerable1 source)\r\n at Swashbuckle.OData.Descriptions.ODataApiExplorer.GetApiDescriptions()\r\n at System.Lazy1.CreateValue()\r\n at System.Lazy1.LazyInitValue()\r\n at System.Lazy1.get_Value()\r\n at Swashbuckle.OData.Descriptions.ODataApiExplorer.get_ApiDescriptions()\r\n at Swashbuckle.OData.ODataSwaggerProvider.GetApiDescriptionsFor(String apiVersion)\r\n at Swashbuckle.OData.ODataSwaggerProvider.GenerateSwagger(String rootUrl, String apiVersion)\r\n at Swashbuckle.OData.ODataSwaggerProvider.<>c__DisplayClass4_0.<GetSwagger>b__1()\r\n at System.Lazy1.CreateValue()\r\n at System.Lazy1.LazyInitValue()\r\n at System.Lazy1.get_Value()\r\n at Swashbuckle.OData.ODataSwaggerProvider.GetSwagger(String rootUrl, String apiVersion)\r\n at Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n`

andyward commented 5 years ago

Your best best here is going to be to narrow down the OData model to just expose a single controller and service that triggers the issue.