我有一个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_Snapshot或http://localhost:9901/api/services/v1/Equities/Get_Snapshot)和http://localhost:9901/api/services/v2/Equities/Get_Snapshot之后调用这两个方法
发布于 2021-03-12 03:36:02
Startup.cs in YOURCOMPANY.Web.Host项目.在services.AddSwaggerGen ...方法中的
ConfigureServicesservices.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 ...方法中,向下滚动并找到
YOURCOMPANY.Web.Host中打开appsettings.json,并在"App"字段中添加一个新的端点配置变量:"SwaggerEndPoint": "/swagger/v1/swagger.json",
"SwaggerV2EndPoint": "/swagger/v2/swagger.json"选项( 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并测试它。
namespace CMS.TestNameSpace
{
[ApiExplorerSettings(GroupName = "v2")]
[Route("api/[controller]/[action]")]
public class TestAppService : (YOUR)AppServiceBase, ITestAppService
{
[HttpGet]
public async Task<TestDto> GetTest(TestDtoInput input)
{
}
}
}https://stackoverflow.com/questions/64497675
复制相似问题