【问题标题】:How to use higher version for web api controller如何使用更高版本的 web api 控制器
【发布时间】:2018-08-31 03:56:02
【问题描述】:

我在下面关注: https://www.hanselman.com/blog/ASPNETCoreRESTfulWebAPIVersioningMadeEasy.aspx

是否可以直接为 Web api 控制器提供更高版本。 喜欢:

ApiVersion("2.05")]   
[RoutePrefix("api/v{version:apiVersion}/ger")]
public class caGerController
[Route("~/api/ger/getDetail")]
[Route("getDetail")]
 GetGerData

当使用上述一个时,它仅在使用 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。

谢谢

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api2 asp.net-web-api-routing api-versioning


    【解决方案1】:

    由于您是按 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 段进行版本控制的不幸结果。如果您不更改默认路由映射,那么管理起来应该没什么大不了的;否则,您应该考虑禁止隐式版本控制或选择替代版本控制方法。

    更多信息请参考这个wiki话题。

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2019-10-29
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多