我在AspNetCore 1.1.2中有这样的代码
[ApiVersion(Versioning.V2)]
[Route("api/v{version:apiVersion}/[controller]")]
public abstract class ApiController : Controller
{
}
public sealed class AwesomeController : ApiController
{
[Route(""), HttpGet]
public string Get()
{
return "Hello from 2.0";
}
}
运行应用程序时,我显然会收到UnsupportedVersion
因为ApiVersionAttribute
未被继承。
我理解,如果我将[ApiVersion(Versioning.V2)]
移动到AwesomeController
,一切都会有效,但我的每个版本的控制器都有一个非常大的结构(比方说15),并希望从特定版本的单个控制器继承它们有一个地方可以添加我的服务总线导入等。
有没有温和的方式来实现这种要求的行为?
P.S。我强烈不想调整IActionSelector
。
答案 0 :(得分:0)
我终于发现最好的方法是使用自己的自定义ApplicationModel
实现来调整IApplicationModelConvention
元数据,您可以在其中指定新的ControllerApiVersionConventionBuilder
并应用于那些已标记的控制器最新NeutralVersionApiVersionModel
,但没有提供任何[ApiVersion]
。此外,可能需要从设置中删除ApiVersionConvention
以停止使用默认版本标记控制器(请参阅此处https://github.com/Microsoft/aspnet-api-versioning/blob/a15fe09917b35c648b8ef5e53c44f05c5b9134ed/src/Microsoft.AspNetCore.Mvc.Versioning/Versioning/ApiVersionConvention.cs#L96)