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

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");

在此处输入图像描述

0 投票
2 回答
503 浏览

asp.net-web-api - 如何检索我的 api 的所有已实现版本的列表?

我在我的 WebApi 项目中使用aspnet-api-versioning ,它工作正常。版本不是硬编码的,它们是从命名空间中检索的。

现在我想检索已经实现的版本列表。我想创建一些端点(我们称之为GetApiVersions),用户可以调用它来检索现有 api 版本号的简单集合,例如 [1, 2, 3]。

在负责根据检索到的请求(CurrentImplementationApiVersionSelector,SelectVersion方法)选择正确的 api 版本的代码中,有一个ApiVersionModel带有ImplementedApiVersions属性的参数。

ImplementedApiVersions属性似乎正是我所需要的,但我不知道如何在我的GetApiVersions端点中访问它。有没有办法找回它?或者有没有其他方法可以以编程方式检索已实现的 api 版本列表?

0 投票
2 回答
2301 浏览

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版本。

0 投票
1 回答
2696 浏览

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

当我删除这条线

它工作正常。

0 投票
1 回答
3054 浏览

asp.net-core - 如何设置 web api 版本控制?

您好,我有一个控制器,我想对其路由进行版本控制。但是我不希望将 api-version 添加到查询字符串中,而是添加到 url 的开头,在控制器名称之后:

典型路径/api/admin/get-computer/1
版本化路径/api/admin/V[version]/get-computer/1

我不明白如何从以下位置配置控制器和UseMvc扩展Startup

启动

首选用法

我怎样才能做到这一点?UseMvc扩展中路由模板的假定形式是什么?

0 投票
4 回答
6406 浏览

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

站点控制器

0 投票
3 回答
930 浏览

c# - 带有 id 的 ASP.NET WebAPI 2 版本控制 POST

我正在尝试在现有的生产性 WebAPI 2 应用程序中实现“Microsoft.AspNet.WebApi.Versioning”nuget,以支持新设计的“v2”控制器。

到目前为止,大多数控制器都可以正常工作,但现在我遇到了一些 POST 控制器的问题。

示例代码:

所有没有附加 {id} 的 POST 方法都有效。但是由于我们有大量的旧客户端很长一段时间,我必须保持旧版本正常运行,并且在旧控制器中删除 {id} 不是一个选项。在新的控制器中,不需要 {id}。

WebAPI 配置

知道我做错了什么或如何解决这个问题吗?

0 投票
2 回答
285 浏览

asp.net-web-api2 - 可以在不归属每个控制器的情况下使用 AddApiVersioning() 吗?

我正在使用config.AddApiVersioning()我的 WebApiConfig 对我的 Asp.Net Web Api 2 api 进行版本控制。我的每个控制器都装饰有类似[Route("api/TestApi/v{version:apiVersion}/{action}/{id?}")].

我想删除大部分装饰,而是在我的 WebApiConfig 中使用类似的东西:

我的问题:

  • 这可能吗?
  • 有例子吗?我发现的大多数示例都装饰了所有控制器。
0 投票
1 回答
235 浏览

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。

0 投票
1 回答
372 浏览

c# - ASP.NET Core API 版本控制 - 部分取代以前的方法版本

我遇到了 API 版本控制 (ASP.NET Core API 2.1) 的问题。我试图取代现有控制器的一种方法,而不必复制以前版本中的所有方法。我认为这会起作用,但它给我带来了路由冲突的问题。例子:

然后我得到错误:

路径 'xxx' 上的方法 'Get' 被多次注册。

我想在两个版本中都支持 GetValue(string value) 方法,但我不想在每次版本时都复制新控制器中的代码。我只想替换一种方法。这是可能的,还是我必须复制整个以前的控制器和其中的每个方法?这有效,但感觉很糟糕:

这现在有效,但我只是无缘无故地复制了代码。在有大量代码的控制器中,这感觉就像代码异味。有解决方法吗?