问题标签 [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.
c# - 如何添加“Content-Type = application/json;v=2.0”,包括使用 HttpClient 进行版本控制?
很抱歉这样问这个问题。我可以给你一种我希望你为我编写代码的感觉。我已经花了一天时间编写代码以发送包含带有版本控制的标头的 http 请求:
对于版本控制,我使用来自 Microsoft/aspnet-api-versioning 项目的媒体类型的版本控制。
我的 API 部分工作正常,我可以使用 Postman 请求正确的版本而不会出现问题:
您看到这一行“Content-Type = application/json;v=2.0”了吗?在邮递员上没问题。使用 C# 中的 HttpClient 是不可能的。
让我在这里复制我尝试过的所有错误解决方案。每次尝试新解决方案时,我都会编辑此问题。通过设施,但为了更清楚,我将复制粘贴图像:
解决方案 1:使用 new Content = ... 的扩展方法
解决方案 1B:来自 BeginnerTejas
解决方案 1C:来自 BeginnerTejas,但现在使用 MediaTypeWithQualityHeaderValue
解决方案 2:使用 request.Headers.Add(...) 的扩展方法
解决方案 3:带有 Client.DefaultRequestHeaders.TryAddWithoutValidation(...) 的 BaseProxy 似乎我无法添加任何“Content-Type”
解决方案 4:BaseProxy 与 Client.DefaultRequestHeaders.Accept.Add(...)
解决方案5:request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
asp.net-web-api - 如何检索我的 api 的所有已实现版本的列表?
我在我的 WebApi 项目中使用aspnet-api-versioning ,它工作正常。版本不是硬编码的,它们是从命名空间中检索的。
现在我想检索已经实现的版本列表。我想创建一些端点(我们称之为GetApiVersions),用户可以调用它来检索现有 api 版本号的简单集合,例如 [1, 2, 3]。
在负责根据检索到的请求(CurrentImplementationApiVersionSelector
,SelectVersion
方法)选择正确的 api 版本的代码中,有一个ApiVersionModel
带有ImplementedApiVersions
属性的参数。
该ImplementedApiVersions
属性似乎正是我所需要的,但我不知道如何在我的GetApiVersions端点中访问它。有没有办法找回它?或者有没有其他方法可以以编程方式检索已实现的 api 版本列表?
c# - 使用 Microsoft.AspNet.WebApi.Versioning 的 Web API 2 版本控制
我正在使用ASP.NET 版本控制库,我已按照步骤将此库添加到一个非常基本的 ASP.NET Web API 2 项目中,这是我的文件的内容:
Global.asax
文件:
Web API 配置:
第一个控制器:
第二个控制器:
当我运行应用程序并导航到这个 url 时:http://localhost:5428/api1/values?api-version=1.0
我得到了想要的结果,但是当我导航到这个 url 时:http://localhost:5428/api1/values?api-version=2.0
我遇到一条错误消息,指出No route providing a controller name with API version '2.0' was found to match request URI 'http://localhost:5428/api1/values'
,我想知道我在这个基本设置中缺少什么?
如果我[ControllerName]
从没有任何变化中删除属性ValuesController2
并且问题仍然存在。
我试图改变第二个控制器的命名空间,但它也没有解决问题!
我正在使用这个库的3.0.1版本。
c# - Microsoft.AspNetCore.Mvc.Versioning,版本 = 3.1.0.0 在 .net 核心 2.2 中不起作用
我正在尝试在我的核心 api 项目中使用 Microsoft.AspNetCore.Mvc.Versioning, Version=3.1.0.0。
下载了nuget包,下面是我的代码
statup.cs 文件
和值控制器如下
现在,当我尝试从邮递员那里获取请求时,我正在获取值。
根据我的理解,它不应该提供响应,因为我没有为此证明任何标题值。
请建议我做错了。
更新 1
当我删除这条线
它工作正常。
asp.net-core - 如何设置 web api 版本控制?
您好,我有一个控制器,我想对其路由进行版本控制。但是我不希望将 api-version 添加到查询字符串中,而是添加到 url 的开头,在控制器名称之后:
典型路径: /api/admin/get-computer/1
版本化路径: /api/admin/V[version]/get-computer/1
我不明白如何从以下位置配置控制器和UseMvc
扩展Startup
:
启动
首选用法
我怎样才能做到这一点?UseMvc
扩展中路由模板的假定形式是什么?
c# - 带有 URL c# 的 Web-Api 版本控制
我已经苦苦挣扎了好几天,我正在尝试使用 url 后缀实现我的 API 版本。fe http://localhost/api/v1/sites & http://localhost/api/v2/sites。
我猜我已经很接近了,但突然间我把一切都搞砸了。
非常感谢您帮助我。
现在我收到:“System.invalidOperationException:'映射到约束键'apiVersion'的约束类型'ApiVersionRouteConstraint'必须实现IhttpRouteConstraint接口。' 在 Global.asax.cs
全球.asax.cs
WebApiConfig.cs
路由配置.cs
站点控制器
c# - 带有 id 的 ASP.NET WebAPI 2 版本控制 POST
我正在尝试在现有的生产性 WebAPI 2 应用程序中实现“Microsoft.AspNet.WebApi.Versioning”nuget,以支持新设计的“v2”控制器。
到目前为止,大多数控制器都可以正常工作,但现在我遇到了一些 POST 控制器的问题。
示例代码:
所有没有附加 {id} 的 POST 方法都有效。但是由于我们有大量的旧客户端很长一段时间,我必须保持旧版本正常运行,并且在旧控制器中删除 {id} 不是一个选项。在新的控制器中,不需要 {id}。
WebAPI 配置
知道我做错了什么或如何解决这个问题吗?
asp.net-web-api2 - 可以在不归属每个控制器的情况下使用 AddApiVersioning() 吗?
我正在使用config.AddApiVersioning()
我的 WebApiConfig 对我的 Asp.Net Web Api 2 api 进行版本控制。我的每个控制器都装饰有类似[Route("api/TestApi/v{version:apiVersion}/{action}/{id?}")]
.
我想删除大部分装饰,而是在我的 WebApiConfig 中使用类似的东西:
我的问题:
- 这可能吗?
- 有例子吗?我发现的大多数示例都装饰了所有控制器。
asp.net - Swagger 文档中的 RoutePrefix 与 apiVersion 模式冲突
我有两个 ApiController
和
Swagger 不会显示 Login v2,直到我在 V1 控制器中更改RoutePrefix
为"v2/account"
代替{version:apiVersion}
或更改相同的内容也产生相同的效果。
这意味着其中之一应该是非模式前缀我正在使用 ASP.NET Api(不是 .NET Core)和Swagger-Net版本 8.3.23.1103。
c# - ASP.NET Core API 版本控制 - 部分取代以前的方法版本
我遇到了 API 版本控制 (ASP.NET Core API 2.1) 的问题。我试图取代现有控制器的一种方法,而不必复制以前版本中的所有方法。我认为这会起作用,但它给我带来了路由冲突的问题。例子:
然后我得到错误:
路径 'xxx' 上的方法 'Get' 被多次注册。
我想在两个版本中都支持 GetValue(string value) 方法,但我不想在每次版本时都复制新控制器中的代码。我只想替换一种方法。这是可能的,还是我必须复制整个以前的控制器和其中的每个方法?这有效,但感觉很糟糕:
这现在有效,但我只是无缘无故地复制了代码。在有大量代码的控制器中,这感觉就像代码异味。有解决方法吗?