asp.net – web-api&swagger文档
发布时间:2020-12-16 07:41:10 所属栏目:asp.Net 来源:网络整理
导读:我写了一个asp web-api,我已经使用 this class为api添加了版本. 我的路线看起来像这样: config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "{namespace}/{controller}/{id}",defaults: new { id = RouteParameter.Optional });config.Service
我写了一个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? 解决方法
最后我使用了SDammann.WebApi.Versioning nuget包和以下路由:
VersionedControllerSelector.VersionPrefix = "v"; config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "v{version}/{controller}/{id}",defaults: new { id = RouteParameter.Optional } ); 我的控制器位于名为v1或v2等的命名空间中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- VS 2012中解决方案资源管理器中的asp.net配置按钮在哪里
- asp.net – 分析器错误消息:无法生成代码.抛出了类型’Sys
- asp.net – 测试Oracle存储过程的最简单的方法
- asp.net-mvc-3 – 新加载页面而不是缓存
- asp.net中程序水晶报告的正确形式是什么?和视觉基础
- asp.net-mvc – 对Json解决方法的EntityFramework? (序列化
- asp.net-mvc – 带有lambda表达式的ASP.net MVC Action URL
- asp.net-mvc – 为什么Razor会添加另一个值属性以及如何删除
- .net – 在PerfMon实例中选择正确的AppPool
- asp经典 – 如何获得经典ASP中的当前域?
推荐文章
站长推荐
- asp.net-mvc – 部分视图和ModelState.AddModelE
- asp.net-mvc-3 – 编码为utf 8的MVC 3 Razor页面
- asp.net-mvc – 如何从ASP.NET MVC的部分视图中获
- asp.net-mvc – 对集合中的每个项目使用DisplayT
- asp.net-mvc-3 – asp.net mvc3请求线程亲和
- asp.net – jQuery弹出窗口返回父级的值
- CookieAuthenticationOptions,ExpireTimeSpan不起
- asp.net-mvc – OpenID Connect的OWIN中间件 –
- asp.net-mvc – EF,ASP MVC依赖注入.多个并发请求
- 使用IIS/ASP.NET反向AJAX
热点阅读