问题标签 [aspnet-api-versioning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
191 浏览

asp.net-core - 如何在不破坏现有集成的情况下引入 Web api 响应负载结构的更改

在我们现有的 .net 核心 Web api (REST) 端点之一中,其响应负载中的属性值之一是电子邮件地址,该地址将很快更改为字母数字 ID。响应负载的这种变化将破坏现有的集成。

这种重大变化的影响可以通过向 api 引入版本来解决,说只有 v2 版本将在其响应负载中使用字母数字 id,否则 v1 版本将继续在其响应负载中呈现电子邮件地址,但是否有任何其他替代解决方案可以避免破坏现有集成,即使在引入现有响应负载结构的变化

现有的响应负载结构:

未来响应有效载荷结构:

0 投票
1 回答
57 浏览

microservices - 跨微服务发送公共 API 版本控制

我有以下架构

API 网关(REST 公共 API)--> MBus --> 微服务(Windows 服务)。

我已经在 API Gateway 中实现了基于 URL 的版本控制,这有助于我向后兼容。基于 API 请求,API 网关将请求转换为消息总线并通过主题发送以进行特定服务侦听。现在,在我通过消息总线的微服务中,我应该如何管理 API 的版本控制以实现向后兼容性,我应该从 API 网关通过消息总线发送 API 版本,以便特定服务知道版本并执行请求的特定版本。当微服务通过消息总线而不是基于 REST 时,跨微服务管理 API 版本控制的标准和方法是什么。

问候,

我知道

0 投票
1 回答
292 浏览

asp.net-core - 如何在 SwaggerUI 中反映使用查询字符串参数的 dotnet Web api 端点?

我正在尝试使用使用查询字符串和标头的 API 版本控制来实现 dotnet web api。在这里,我使用 swagger 来记录和测试端点。我成功地使用了路径版本控制并以大摇大摆的方式反映了端点。但是我很难理解如何在招摇中反映查询字符串和标头版本控制。我试图从这篇文章https://swagger.io/docs/specification/describing-parameters/#query-parameters中找到解决方案,但仍然对如何在我的 dotnet web api 中实现这一点感到困惑。

我的项目包含 2 个具有以下 API 版本的主要控制器类。

  1. WeatherForecastController.cs

  2. WeatherForecastController2.cs

和 startup.cs 文件

0 投票
1 回答
213 浏览

c# - 从 .NET Core 2.2 升级到 3.1 时无法禁用默认 API 版本控制程序

我目前正在经历从 2.2 升级到 3.1 的过程。

这样做时,.NET 的默认 api-versioner 与我们的一起运行,尽管添加了代码来删除它:

是否有一种新方法来注册自定义版本器,或者是否有一种新方法可以在调用“AddApiVersioning”后删除 .NET 的默认版本。

0 投票
1 回答
897 浏览

api - 使用 Header 的 Web Api 版本控制,我们如何使用 Net Framework MVC Api 在 Swagger UI 上使用它

嗨,我一直在我的 API 中使用标头版本控制方法,下面是链接。我现在的问题是我似乎无法使用 SwaggerConfig.cs 中的 Swagger

我将向您展示多版本控制中的代码,但它不起作用。这是多版本控制的一部分

https://seroter.com/2012/09/25/versioning-asp-net-web-api-services-using-http-headers/

Header APi 正在使用具有相同 api 路由的不同控制器..所以我的版本控制都是基于控制器名称..有人可以帮助我..谢谢

0 投票
1 回答
148 浏览

asp.net-core - AspNetZero .NetCore + Angular 项目 - api 版本控制

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

我目前在显示两个版本的 swagger 页面上,但是对于 v1,我得到一个 AmbiguousMatchException 并且对于 v2 swagger 找不到 v2 文件,所以我认为它没有生成。

在我的应用程序项目中,我将当前 AppService 的命名空间更改为 .v1,并创建了一个具有命名空间 v2 的新 AppService,它继承了旧的,并覆盖了 1 个方法,即 v2。

目的是一旦完成即能够调用这两种方法:(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

0 投票
1 回答
594 浏览

asp.net-core - 如何从非默认版本文档中排除默认 API 路由版本

我有一个 ASP.NET Core (3.1) API,它使用aspnet-api-versioning (4.1.1) 库进行版本控制。该项目设置为从 URL 读取版本,如果未指定版本,则使用默认版本 (1)。示例控制器支持两个 API 版本(1 和 2)并且有两个相同的方法,每个版本一个。由于支持默认版本,因此控制器上有两个 Route 属性,一个没有版本,一个有。

在为 API 生成 OpenAPI 文档时,使用Swashbuckle.AspNetCore (5.6.3) 库,API 版本 1 和 2 的文档都将包含非版本化路由;“/客户/{externalCustomerId}”。要解决的问题是,如何将 Swagger 生成配置为仅包含默认版本的文档中的非版本化路由?鉴于下面的代码,版本 1 的文档应该是:

  • /客户/{externalCustomerId}
  • /v1/Customer/[externalCustomerId}

并且版本 2 的文档应该是:

  • /v2/Customer/{externalCustomerId}

启动:

控制器:

可以(应该)以SwaggerGenOptions.DocInclusionPredicate()某种方式解决它吗?我试了一下,但找不到从ApiVersion谓词中获取默认 API 版本的方法。

一种选择可能是从DefaultApiVersionDescriptionProvider(或实现IApiVersionDescriptionProvider)继承来访问 Options 属性,这将允许我们获取默认 API 版本并在 Startup for 中使用带有闭包的谓词SwaggerGenOptions.DocInclusionPredicate(),但这是一个好方法吗?还有哪些其他选择?

0 投票
1 回答
416 浏览

asp.net - 找不到类型或命名空间名称“ApiVersionDescription”(您是否缺少 using 指令或程序集引用?)

我已经添加了 Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer 的包,但我仍然收到此错误。有没有人知道如何解决这个问题?提前谢谢你。

参考:https ://www.meziantou.net/versioning-an-asp-net-core-api.htm#integration-with-ope

0 投票
1 回答
323 浏览

c# - AspNetCore api 版本控制 MapToApiVersion 未发现但仍能到达路线

请考虑以下情况。

因为版本 1.0 未在 ApiVersionAttribute 中的控制器上定义,所以未发现未声明 API 版本。就像我想要的那样,因为从这一刻起我不想再支持这个版本了。我依赖 IApiVersionDescriptionProvider 的招摇文档工作正常,不再为 version1 生成文档。当我对 2.1 版进行 api 调用并检查返回的版本标头时,也只有受支持的 2.1 版和已弃用的 2.0 版。和预想的一样。

但是当我调用1.0 版本时,我仍然到达端点,并且 apiversion 仍然没有返回 1.0 作为受支持的版本。我希望这会返回一个带有“UnsupportedApiVersion”错误消息的 400 错误请求以及描述版本 2.0 和 2.1 的标头。

我探索这种行为的原因是我们希望通过在运行时通过一些配置为某个版本添加 ApiVersionAttribute 来升级我们的微服务版本。所以我们不需要进行新的构建,因为 Getdefault 路由将为那些更高的 apiversions 映射。

(包使用 Microsoft.AspNetCore.Mvc.Versioning)

感谢您的任何意见!

0 投票
2 回答
1629 浏览

.net - 'IServiceCollection' 不包含使用 dot net 5 对 webapi vs 代码项目的 'AddApiVersioning' 的定义

我正在尝试将版本控制 (Microsoft.AspNet.WebApi.Versioning) 与 dotnet 5 一起用于 webapi 项目。我添加了 nuget 包,但出现以下错误:

“IServiceCollection”不包含“AddApiVersioning”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“AddApiVersioning”(您是否缺少 using 指令或程序集引用?)

在这条线上:

在我的 Startup.cs

我的 .csproj 文件如下所示:

我尝试遵循一些示例,例如这个这个这个,我应该有以下“使用指令”,我有:

有人有同样的挑战吗?.net 5 中是否支持版本控制?