Asp.net web api 如何为web api控制器使用更高版本

Asp.net web api 如何为web api控制器使用更高版本,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,api-versioning,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,Api Versioning,我的发言如下: 是否可以直接为web api控制器提供更高的版本。 比如: 当使用上面的一个时,它仅在使用URL作为api/v2.05/ger/getDetail 但当使用URL作为api/ger/getDetail并获取消息作为“code”:“ApiVersionUnspecified”, 如果将版本从2.05更改为1.0(与所有其他控制器一样),则api/ger/getDetail起作用 如何解决这个问题,这个控制器需要2.05,还需要访问api/ger/getDetailURL 谢谢因为

我的发言如下:

是否可以直接为web api控制器提供更高的版本。 比如:

当使用上面的一个时,它仅在使用URL作为api/v2.05/ger/getDetail 但当使用URL作为
api/ger/getDetail
并获取消息作为
“code”:“ApiVersionUnspecified”,

如果将版本从2.05更改为1.0(与所有其他控制器一样),则
api/ger/getDetail
起作用

如何解决这个问题,这个控制器需要2.05,还需要访问
api/ger/getDetail
URL


谢谢

因为您是按URL段进行版本控制的,所以您需要做一些事情。首先,在选项中,您需要使用以下命令允许隐式版本控制:

options.AssumeDefaultVersionWhenUnspecified = true;
您的原始API有一些从未声明或命名的版本。默认配置将使用“1.0”。如果希望默认值为其他值,请指定:

options.DefaultApiVersion = new ApiVersion( 2, 0 );
下一步是,您必须在希望具有默认路径的控制器上浮动路由模板。ASP.NET和我知道的所有其他栈都没有办法在路由模板中间提供或填充默认值。 如果“2.0”是您的初始默认版本,那么您的控制器将如下所示:

[ApiVersion( "2.0" )]
[ApiVersion( "2.05" )]
[RoutePrefix( "api" )]
public class GerController : ApiController
{
    [Route( "ger/getDetails" )]
    [Route( "v{version:apiVersion}/ger/getDetails" )]
    public IHttpActionResult GetDetails() => Ok();
}
如果更改映射到默认路由的控制器,则必须将路由模板移动到该新控制器类型

这是按URL段进行版本控制的不幸结果。如果您不更改默认的路由映射,那么管理它应该不是一件大事;否则,应考虑禁用隐式版本控制或选择替代版本控制方法。


有关更多信息,请参阅本主题。

由于您是按URL段进行版本控制的,因此您需要做一些事情。首先,在选项中,您需要使用以下命令允许隐式版本控制:

options.AssumeDefaultVersionWhenUnspecified = true;
您的原始API有一些从未声明或命名的版本。默认配置将使用“1.0”。如果希望默认值为其他值,请指定:

options.DefaultApiVersion = new ApiVersion( 2, 0 );
下一步是,您必须在希望具有默认路径的控制器上浮动路由模板。ASP.NET和我知道的所有其他栈都没有办法在路由模板中间提供或填充默认值。 如果“2.0”是您的初始默认版本,那么您的控制器将如下所示:

[ApiVersion( "2.0" )]
[ApiVersion( "2.05" )]
[RoutePrefix( "api" )]
public class GerController : ApiController
{
    [Route( "ger/getDetails" )]
    [Route( "v{version:apiVersion}/ger/getDetails" )]
    public IHttpActionResult GetDetails() => Ok();
}
如果更改映射到默认路由的控制器,则必须将路由模板移动到该新控制器类型

这是按URL段进行版本控制的不幸结果。如果您不更改默认的路由映射,那么管理它应该不是一件大事;否则,应考虑禁用隐式版本控制或选择替代版本控制方法。

有关更多信息,请参阅本主题