请考虑以下情况。
因为版本 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 映射。
// Declare both versions
[ApiVersion("2.0", Deprecated = true)]
[ApiVersion("2.1")]
[Route("v{version:apiVersion}/HelloWorld")] // Support path versioning
[ApiController]
public class HelloWorldController : ControllerBase
{
// Map to v1.0
[MapToApiVersion("1.0")]
public string Get1() => "v1.0";
// Map to v2.0
[MapToApiVersion("2.0")]
public string Get2() => "v2.0";
// Map to all versions defined on the controller that not already have a mapping
public string Getdefault() => $"{forExamplePerposeHereIsVersionReturned}";
}
(包使用 Microsoft.AspNetCore.Mvc.Versioning)
感谢您的任何意见!