我写了一个asp web-api,我已经使用
this class为api添加了版本.
我的路线看起来像这样:
config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "{namespace}/{controller}/{id}",defaults: new { id = RouteParameter.Optional } ); config.Services.Replace(typeof(IHttpControllerSelector),new NamespaceHttpControllerSelector(config));
所以我可以访问https:// localhost:44301 / v1 / test
我现在正在尝试添加Swagger来生成一些api文档(实际上我使用的是Swashbuckle Nuget包)
当我浏览/ swagger页面加载但是所有控制器都出错:
Unable to read api 'TestController' from path https://localhost:44301/swagger/api-docs/TestController (server returned undefined)
如果我浏览到https:// localhost:44301 / swagger / api-docs / TestController,它会出现一个NullReferenceException,其堆栈跟踪如下:
at Swashbuckle.Swagger.OperationGenerator.CreateParameter(ApiParameterDescription apiParamDesc,String apiPath) at Swashbuckle.Swagger.OperationGenerator.<>c__displayClass2.<ApiDescriptionToOperation>b__1(ApiParameterDescription paramDesc) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Swashbuckle.Swagger.OperationGenerator.ApiDescriptionToOperation(ApiDescription apiDescription) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Swashbuckle.Swagger.ApiExplorerAdapter.CreateApi(IGrouping`2 apiDescriptionGroup,OperationGenerator operationGenerator) at Swashbuckle.Swagger.ApiExplorerAdapter.<>c__displayClassb.<GetDeclaration>b__7(IGrouping`2 apiDescGrp) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Swashbuckle.Swagger.ApiExplorerAdapter.GetDeclaration(String basePath,String version,String resourceName) at Swashbuckle.Application.CachingSwaggerProvider.<>c__displayClass4.<GetDeclaration>b__3(String k) at System.Collections.Concurrent.ConcurrentDictionary`2.GetorAdd(TKey key,Func`2 valueFactory) at Swashbuckle.Application.CachingSwaggerProvider.GetDeclaration(String basePath,String resourceName) at Swashbuckle.Application.SwaggerSpecHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Web.Http.dispatcher.HttpRoutingdispatcher.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) at System.Web.Http.HttpServer.<>n__FabricatedMethod9(HttpRequestMessage,CancellationToken ) at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
如果我改变路线:
config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "{controller}/{id}",defaults: new { id = RouteParameter.Optional } )
Swagger页面然后工作,但实际的api不行!
所以问题是,如何让Swagger使用版本化的api?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。