问题标签 [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.
symfony - symfony4 FOS Rest bundle verisoning 不起作用
我已经尝试使用 fos bundle rest api 版本控制symfony4,它的 url 路由正在工作,但 api 版本控制不起作用。请找到我下面的代码,我错过了任何东西。
我的网址:
当我们访问上述 url 时,总是返回相同的一组结果 v1。
路线.yml
fos_rest.yaml
测试控制器.php
jms_serializer.yaml
参考链接:
c# - 大摇大摆地为通用控制器添加文档和操作
我正在开发带有插件的 webapi。我想在添加插件时更新 swagger 文档。当我不使用版本时,我可以处理这个问题。所有方法都添加到 swagger 文档中。
但是当api开启apiversion时,新版本swagger文档的生成失败。它返回一个 404。
我需要做些什么才能使版本控制工作并获取动态控制器功能...
c# - Web-API 版本控制不适用于默认版本
我创建了一个带有版本控制的 Web API 应用程序。我将使用Microsoft.AspNet.WebApi.Versioning
包来做到这一点。
Webapi配置:
这里我的假设是如果我没有通过版本,默认情况下它将选择版本 1。
控制器代码:
如果我使用http://localhost:10280/api/users/all?api-version=1.0
URL 进行测试,它工作正常。我将在现有项目中实现此功能。
为了向后兼容,我尝试了http://localhost:10280/api/users/all
URL。它给了我以下错误,状态码为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.Lazy1.CreateValue()\r\n at System.Lazy
1.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:
经过讨论和一些帮助,我可以确认这个默认版本适用于传统路由。
使用属性路由时重现该问题。请检查我更新的代码。
- 我在 WebAPIConfig 文件中没有任何默认 API 路由。
- 我在控制器中更新 Route Prefix 和 Route
现在问题重现了。
您还可以通过结合常规和属性来重现该问题。
更新 2:
现在我注意到问题在于配置。如果我直接在 Owin 启动类中添加路由配置,它工作正常。
除了使用我们现有的 WebAPIConfig 类之外,它还会创建新的HttpConfiguration 。所以我不知道它可能会影响任何其他功能
因此,如果我将 Owin 配置为在 Global.asax 中使用 webaPI 而不是GlobalConfiguration.Configure(WebApiConfig.Register),它工作正常。
c# - Core 2.1 APIVersioning 动作歧义
我已经在我的 Core 2.1 API 项目中成功设置了 API 版本控制。
http://localhost:8088/api/Camps/ATL2016/speakers?api-version=x.x
版本1.1
和2.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:
控制器:
c# - URI 中的版本不受支持的 API 版本——出了什么问题?
我有一个使用.net core 2.2的 Web API 项目(也许有问题。)
这些路线正在等待 OpenIdDict 的 OAuth 授权,但这对我来说完全没问题。我正在尝试一种非常简单的方法:
startup.cs 仅包含:
API 控制器具有三个不同的路由用于测试目的。请注意,控制器本身没有 [Route()] 或 [ApiVersion()] 注释。
如果我做一个授权的请求,比如
.net 核心用 BadRequest 回答:
我错过了什么?
spring-webflux - 使用 Spring WebFlux 进行标头 API 版本控制的干净解决方案?
尝试使用 RouterFunction 在 Spring WebFlux 中使用 HTTP 标头进行 API 版本控制。
使用 Spring WebFlux RouterFunction 无法使用
@GetMapping(headers = "API-VERSION=1.0.0")
注释来完成。
我目前的尝试在我看来不是一个好的尝试。
有没有更好的办法 ?
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 的请求正文;
有任何想法吗?
c# - 为所有 WEB API 控制器指定 API 版本
我正在使用 Web API .NET 2 构建一个 API,创建了一个所有其他控制器都继承的 BaseController 类。我想使用 [ApiVersion()] 属性应用 API 版本控制,但是如果我有多个版本的 API,我不想用相同的属性装饰每个控制器类。有没有办法为所有控制器设置所有可能的 API 版本?我试图在 BaseController 类上设置属性,但不幸的是,派生类没有继承属性。
node.js - 如何修复我的 app.js 文件中的 API 版本控制代码?
我是 node.js 的新手,并试图在我的 app.js 文件中使用 express-routes-versioning 模块并且在路由版本处理中遇到问题。请帮助我处理我的代码。
下面是我的代码,请看一下..
module - Perl6 如何决定加载哪个版本的模块?
当我这样做时use Foo:ver<1.0>;
,它会加载 1.0 版的 module Foo
。但是当我这样做时会发生什么use Foo;
?