问题标签 [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 投票
0 回答
437 浏览

symfony - symfony4 FOS Rest bundle verisoning 不起作用

我已经尝试使用 fos bundle rest api 版本控制symfony4,它的 url 路由正在工作,但 api 版本控制不起作用。请找到我下面的代码,我错过了任何东西。

我的网址:

当我们访问上述 url 时,总是返回相同的一组结果 v1。

路线.yml

fos_rest.yaml

测试控制器.php

jms_serializer.yaml

参考链接:

  1. github
  2. Symfony 版本
0 投票
1 回答
1587 浏览

c# - 大摇大摆地为通用控制器添加文档和操作

我正在开发带有插件的 webapi。我想在添加插件时更新 swagger 文档。当我不使用版本时,我可以处理这个问题。所有方法都添加到 swagger 文档中。

但是当api开启apiversion时,新版本swagger文档的生成失败。它返回一个 404。

我需要做些什么才能使版本控制工作并获取动态控制器功能...

0 投票
3 回答
6144 浏览

c# - Web-API 版本控制不适用于默认版本

我创建了一个带有版本控制的 Web API 应用程序。我将使用Microsoft.AspNet.WebApi.Versioning包来做到这一点。

Webapi配置:

这里我的假设是如果我没有通过版本,默认情况下它将选择版本 1。

控制器代码:

如果我使用http://localhost:10280/api/users/all?api-version=1.0URL 进行测试,它工作正常。我将在现有项目中实现此功能。

为了向后兼容,我尝试了http://localhost:10280/api/users/allURL。它给了我以下错误,状态码为500 。

{ "Message": "发生错误。",
"ExceptionMessage": "索引不能小于 0 或等于或大于集合中的项目数。\r\n
参数名称: index\r\ n实际值为 0。"、
"ExceptionType": "System.ArgumentOutOfRangeException"、
"StackTrace": " 在
System.Web.Http.WebHost.Routing.HostedHttpRouteCollection.get_Item(Int32 索引)\r\n 在 Microsoft.Web.Http .Dispatcher.ApiVersionControllerSelector.GetControllerName(HttpRequestMessage request)\r\n 在 Microsoft.Web.Http.Dispatcher.ControllerSelectionContext.<>c__DisplayClass6_0.<.ctor>b__0()\r\n 在 System.Lazy 1.CreateValue()\r\n at System.Lazy1.LazyInitValue()\ r\n 在 System.Lazy`1.get_Value()\r\n
在 Microsoft.Web.Http.Dispatcher.ConventionRouteControllerSelector.SelectController(ControllerSelectionContext 上下文)\r\n 在 Microsoft.Web.Http.Dispatcher.ApiVersionControllerSelector.SelectController(HttpRequestMessage 请求)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher .d__15.MoveNext()" }


更新1:

经过讨论和一些帮助,我可以确认这个默认版本适用于传统路由。

使用属性路由时重现该问题。请检查我更新的代码。

  1. 我在 WebAPIConfig 文件中没有任何默认 API 路由。
  2. 我在控制器中更新 Route Prefix 和 Route

现在问题重现了。

您还可以通过结合常规和属性来重现该问题。

更新 2:

现在我注意到问题在于配置。如果我直接在 Owin 启动类中添加路由配置,它工作正常。 

除了使用我们现有的 WebAPIConfig 类之外,它还会创建新的HttpConfiguration 。所以我不知道它可能会影响任何其他功能

因此,如果我将 Owin 配置为在 Global.asax 中使用 webaPI 而不是GlobalConfiguration.Configure(WebApiConfig.Register),它工作正常。

0 投票
3 回答
916 浏览

c# - Core 2.1 APIVersioning 动作歧义

我已经在我的 Core 2.1 API 项目中成功设置了 API 版本控制。

http://localhost:8088/api/Camps/ATL2016/speakers?api-version=x.x

版本1.12.0工作,但因操作1.0不明确而失败Get(string, bool)

ASP.NET Core Web 服务器:

MyCodeCamp> fail: Microsoft.AspNetCore.Mvc.Routing.DefaultApiVersionRoutePolicy[1] MyCodeCamp> Request matched multiple actions resulting in ambiguity. Matching actions: MyCodeCamp.Controllers.Speakers2Controller.Get(string, bool) (MyCodeCamp) MyCodeCamp> MyCodeCamp.Controllers.SpeakersController.Get(string, bool) (MyCodeCamp) MyCodeCamp> fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] MyCodeCamp> An unhandled exception has occurred while executing the request. MyCodeCamp> Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

控制器Speakers2装饰有,[ApiVersion("2.0")]所以它的Get(string, bool)动作是 2.0 版,所以为什么不能Versioning区分它们呢?

Microsoft.AspNetCore.Mvc.Versioning 3.0.0(由于版本冲突,无法安装更高版本)

启动.cs:

控制器:

0 投票
2 回答
7844 浏览

c# - URI 中的版本不受支持的 API 版本——出了什么问题?

我有一个使用.net core 2.2的 Web API 项目(也许有问题。)

这些路线正在等待 OpenIdDict 的 OAuth 授权,但这对我来说完全没问题。我正在尝试一种非常简单的方法:

startup.cs 仅包含:

API 控制器具有三个不同的路由用于测试目的。请注意,控制器本身没有 [Route()] 或 [ApiVersion()] 注释。

如果我做一个授权的请求,比如

.net 核心用 BadRequest 回答:

我错过了什么?

0 投票
1 回答
387 浏览

spring-webflux - 使用 Spring WebFlux 进行标头 API 版本控制的干净解决方案?

尝试使用 RouterFunction 在 Spring WebFlux 中使用 HTTP 标头进行 API 版本控制。

使用 Spring WebFlux RouterFunction 无法使用 @GetMapping(headers = "API-VERSION=1.0.0")注释来完成。

我目前的尝试在我看来不是一个好的尝试。

有没有更好的办法 ?

0 投票
2 回答
373 浏览

c# - 为什么添加 Microsoft.AspNetCore.OData.Versioning 后我的 HTTP Post 不再传递正文内容

我正在研究通过 Microsoft.AspNetCore.Odata v7.1.0 NuGet 实现 OData 的 ASP.NET Core 2.2 API。我一切正常,所以我决定通过 Microsoft.AspNetCore.OData.Versioning v3.1.0 添加 API 版本控制。

现在,我的控制器中的 GET 和 GET{id} 方法可以与版本控制一起正常工作。例如,我可以使用 URL 访问 GET 列表端点方法

或者

但是,当我尝试创建新记录时,请求会路由到控制器中的正确方法,但现在请求正文内容未传递给 POST 控制器方法

我一直在关注 Microsoft.ApsNetCore.OData.Versioning GitHub中的示例

我的控制器中有 HttpPost 方法;

当我调试时,请求正确地路由到控制器方法,但“记录”变量现在为空,而在添加 API 版本控制的代码更改之前,它已正确填充。

我怀疑这是我使用模型构建器的方式,因为该代码已更改为支持 API 版本控制。

在尝试实现 API 版本控制之前,我使用了一个模型构建器类,如下所示;

还有一个 Startup.cs --> Configure 方法,如下面的代码片段所示;

它在控制器的 HttpPost 方法中与 [FromBody] 一起使用。

但是,在遵循 API Versioning OData GitHub 中的示例时,我现在使用如下所示的配置类,而不是之前的模型构建器;

而我的 Startup.cs --> Configure 方法改变如下图;

如果相关,我的 Startup.cs -> ConfigureServices 中有以下代码;

我觉得问题在于模型在某种程度上没有正确匹配,但我看不出它为什么不正确

更新 3/18/19 - 附加信息

这是我的实体类;

和 EntityBase 类;

这是 Postman 的请求正文;

有任何想法吗?

0 投票
2 回答
768 浏览

c# - 为所有 WEB API 控制器指定 API 版本

我正在使用 Web API .NET 2 构建一个 API,创建了一个所有其他控制器都继承的 BaseController 类。我想使用 [ApiVersion()] 属性应用 API 版本控制,但是如果我有多个版本的 API,我不想用相同的属性装饰每个控制器类。有没有办法为所有控制器设置所有可能的 API 版本?我试图在 BaseController 类上设置属性,但不幸的是,派生类没有继承属性。

0 投票
0 回答
164 浏览

node.js - 如何修复我的 app.js 文件中的 API 版本控制代码?

我是 node.js 的新手,并试图在我的 app.js 文件中使用 express-routes-versioning 模块并且在路由版本处理中遇到问题。请帮助我处理我的代码。

下面是我的代码,请看一下..

0 投票
1 回答
167 浏览

module - Perl6 如何决定加载哪个版本的模块?

当我这样做时use Foo:ver<1.0>;,它会加载 1.0 版的 module Foo。但是当我这样做时会发生什么use Foo;