首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AspNetZero .NetCore + api版本控制

AspNetZero .NetCore + api版本控制
EN

Stack Overflow用户
提问于 2020-10-23 09:45:13
回答 1查看 265关注 0票数 1

我有一个AspNetZero .NetCore + Angular项目,为了向后兼容,我需要实现该项目的api版本控制。我在网上学习了几个示例,但它们要么没有指定所有步骤,要么是特定于mvc的,这个项目使用AppService模式。如果有人成功地在AspNetZero项目中实现了api版本控制,我将非常感谢您的帮助。

我目前在显示两个版本的swagger页面上,但是对于v1,我得到一个AmbiguousMatchException,而v2 swagger无法找到v2文件,所以我假设它不会生成。

在我的应用程序项目中,我将当前AppService的命名空间更改为.v1,并创建了一个带有名称空间v2的新AppService,该名称空间继承了旧的v2,并重写了将成为v2的1方法。

目的是在使用i.e:(http://localhost:9901/api/services/app/Equities/Get_Snapshothttp://localhost:9901/api/services/v1/Equities/Get_Snapshot)和http://localhost:9901/api/services/v2/Equities/Get_Snapshot之后调用这两个方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-12 03:36:02

  1. Open Startup.cs in YOURCOMPANY.Web.Host项目.

services.AddSwaggerGen ...方法中的

  1. ,向下滚动并找到ConfigureServices

  1. 实现以下代码:

services.AddSwaggerGen(options => { options.SwaggerDoc(" V1 ",new OpenApiInfo() { Title = "MY“,Version = "v1",Description =”APIs forYourV1 API“) });options.SwaggerDoc("public",新OpenApiInfo() {OpenApiInfo= "CMS API",Version = " V2 ",Description = "Any for your V2 API.“});options.DocInclusionPredicate((docName,apiDesc) => { switch (docName) { case "v1":返回true;大小写"v2":返回apiDesc.GroupName == null \ apiDesc.GroupName == "v2";默认值:返回false;( });options.ParameterFilter();options.SchemaFilter();options.OperationFilter();options.OperationFilter();options.CustomDefaultSchemaIdSelector();options.OperationFilter()

下一步,在app.UseSwaggerUI ...方法中,向下滚动并找到

  1. YOURCOMPANY.Web.Host中打开appsettings.json,并在"App"字段中添加一个新的端点配置变量:

代码语言:javascript
复制
"SwaggerEndPoint": "/swagger/v1/swagger.json",
"SwaggerV2EndPoint": "/swagger/v2/swagger.json"

  1. 实现以下代码:

选项( options.SwaggerEndpoint(_appConfiguration"App:SwaggerEndPoint",{MY API V1);options.SwaggerEndpoint(_appConfiguration"App:SwaggerPublicEndPoint","MY API V2“;options.IndexStream = () => Assembly.GetExecutingAssembly() .GetManifestResourceStream("YOURCOMPANY.Web.wwwroot.swagger.ui.index.html");( options.InjectBaseUrl(_appConfiguration"App:ServerRootAddress");});

现在您可以通过在您的项目中添加ApiExplorerSettings属性来实现V2组中的API;让我们假设您有一个名为(TestAppService)的服务,即

然后在下面的命名空间中实现您的方法(API),只需打开Swagger并测试它。

代码语言:javascript
复制
namespace CMS.TestNameSpace
{
    [ApiExplorerSettings(GroupName = "v2")]
    [Route("api/[controller]/[action]")]
    public class TestAppService : (YOUR)AppServiceBase, ITestAppService
    {
        [HttpGet]
        public async Task<TestDto> GetTest(TestDtoInput input)
        {

        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64497675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档