asp.net-core – 使用操作约束时在MVC 6中使用Swagger的多个Api
希望有人尝试过与MVC 6和Swagger中的版本化API类似的东西,以显示有关不同版本的文档.
我按照this ASP.NET 5 repository在MVC 6中使用推荐的API版本.我所做的唯一更改是从请求的自定义http头读取api版本的GetVersion方法: //in VersionRangeValidator.cs public static string GetVersion(HttpRequest request) { //return request.Query["version"]; if (!string.IsNullOrWhiteSpace(request.Headers[Constants.CommonRoutingDefinitions.ApiVersionSegmentName])) { return request.Headers[Constants.CommonRoutingDefinitions.ApiVersionSegmentName]; } return Constants.CommonRoutingDefinitions.CurrentApiVersion; } 我有一个像这样的控制器: [Route("api/[controller]")] [Produces(Constants.MediaTypeNames.ApplicationJson)] public class TagsController : Controller { private readonly ITagService _tagService; public TagsController(ITagService tagService) { _tagService = tagService; } /// <summary> /// Version 1 by default /// </summary> /// <returns>All the tags</returns> [HttpGet] [Produces(typeof(IEnumerable<Tag>))] public IEnumerable<Tag> GetTags() { IEnumerable<Tag> tags = _tagService.GetTags(); return tags; } /// <summary> /// Version 2 /// </summary> /// <returns>All the tags V2</returns> [VersionGet("",versionRange: "[2]")] public IEnumerable<Tag> GetTagsV2() { IList<Tag> tags = new List<Tag> { new Tag { Id = 1,Links = Enumerable.Empty<Link>().ToList(),Name = "Tag version 2" } }; return tags; } } 使用自定义http标头进行版本控制即可
默认情况下将触发GetTags()操作,因为没有指定标头和
将点击GetTagsV2()动作. 我已经按照this blog的步骤添加了Swagger UI和Swagger GEN库,所以在我的project.json中我有以下依赖项: "Swashbuckle.SwaggerGen": "6.0.0-rc1-final","Swashbuckle.SwaggerUi": "6.0.0-rc1-final" 然后在我的Startup.cs中,我将Swagger添加到管道中 //inside Configure(IApplicationBuilder app) app.UseSwaggerGen(); app.UseSwaggerUi(); 我按如下方式配置Swagger: private void ConfigureSwagger(IServiceCollection services) { services.AddSwaggerGen(); services.ConfigureSwaggerDocument(options => { options.MultipleApiVersions(new Swashbuckle.SwaggerGen.Info[] { new Swashbuckle.SwaggerGen.Info { Version = "v1",Title = "MyApp API",Description = "A RESTful API" },new Swashbuckle.SwaggerGen.Info { Version = "v2",Title = "MyApp API (v2)",Description = "A RESTful API" } },(description,version) => { //description is an instance of ApiDescription and //version is either "v1" or "v2" //depending on the user choice in swagger UI page //TODO,how can I know whether the action belongs to v1 or to v2 to return true or false as appropriate? }); options.OperationFilter(new Swashbuckle.SwaggerGen.XmlComments.ApplyXmlActionComments(Configuration["Documentation:SwaggerDocXml"])); }); services.ConfigureSwaggerSchema(options => { options.DescribeAllEnumsAsStrings = true; options.ModelFilter(new Swashbuckle.SwaggerGen.XmlComments.ApplyXmlTypeComments(Configuration["Documentation:SwaggerDocXml"])); }); } 问题是我不知道如何从描述(这是Microsoft.AspNet.Mvc.ApiExplorer.ApiDescription的一个实例)获得必要的信息,以了解是否必须在Swagger UI中显示给定的操作或不依赖在指定的版本上. PS:This stackoverflow question帮我实现了MVC 6的版本控制,但我找不到很多关于Swagger如何与这种API版本化方式集成的方法. 解决方法
我在这里回答第一个问题,希望你发现它很有用.我为代码片段的格式错误道歉,但现在我手上的时间很少.
你几乎就在那里,但你没有在描述中添加版本的过滤器.这适用于我的以下url格式的实现: "/v1/Sessions" and "/v3/Sessions" options.MultipleApiVersions(new Info[]{ new Info { Version = "v1",Title = "your_own",Description = "Defines the API to access... your_own",TermsOfService = "your_own",Contact = new Contact() { Email = "your_own",Name = "your_own" } },new Info { Version = "v3",Description = "Defines the API to .... your_own",Name = "your_own" } }},version) => { //Here we compare if the version is part of the incoming URI,if yes,show it on swagger page. return description.RelativePath.ToLower().Contains(version.ToLower()); } ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- vs文件上传失败--超过最大字符限制
- ASP.NET Core的JWT的实现(自定义策略形式验证).md
- asp.net-mvc – ELMAH和SQL Server 2008 R2?
- asp.net – 如何有效地使用Server.Transfer
- 将ASP.NET MVC 3项目升级到ASP.NET MVC 4
- ASP.NET MVC错误处理 – 删除aspxerrorpath
- asp.net – 如何添加验证到我的POCO(模板)类
- asp.net-web-api – 默认使用ASP.NET Web API返回json
- asp.net-mvc – ASP.NET MVC:如果视图有错误,如何发出编译
- 互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑
- asp.net-mvc – 基于Knockout的应用程序框架
- asp.net-mvc – 在ASP.Net MVC中定义自定义URL路
- IHttpAsyncHandler和ASP.NET“请求执行”计数器的
- asp.net-web-api – 将属性注入Web API的`System
- asp.net-core – asp.net核心身份中的多个&S
- ASP.NET MVC错误处理 – 删除aspxerrorpath
- 如何将组名应用于asp.net中的HTML单选按钮?
- asp.net – MVC 3 htmlhelper的扩展方法来包装内
- asp.net – Webservices可以作为单身人士引起不同
- 在ASP.NET中如何处理未处理的异常?