【问题标题】:Versioning in WebApi2 using Attribute Routing使用属性路由在 WebApi2 中进行版本控制
【发布时间】:2014-01-14 23:44:20
【问题描述】:

我有一个基于 WebApi v1 的 WebApi 项目,它使用以下内容来确定要使用的 API 版本...

    public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
    {
        var controllers = GetControllerMapping();
        var routeData = request.GetRouteData();
        var controllerName = (string)routeData.Values["controller"];
        HttpControllerDescriptor result = null;

        if (!controllers.TryGetValue(controllerName, out result))
        {
            string version;
            if (!GetVersionFromMediaType(request, out version))
            {
                if (!GetVersionFromAcceptHeaderVersion(request, out version))
                {
                    if (!GetVersionFromHeader(request, out version))
                    {
                        if (!GetVersionFromQueryString(request, out version))
                        {
                            version = LATEST_VERSION;
                        }
                    }
                }
            }

            HttpControllerDescriptor versionedDescriptor;

            var newName = string.Concat(controllerName, "V", version);
            if (controllers.TryGetValue(newName, out versionedDescriptor))
            {
                result = versionedDescriptor;
            }
        }

        return result;
    }

我正在使用 WebApi2 进行测试,我注意到如果我使用属性路由将我的路由定义为 request.GetRouteData() 不包含对控制器的任何引用(我可以找到),则此过程将失败。

这是否意味着我只能通过在路由本身中包含版本来进行版本控制?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    您可以在以下帖子中查看我的答案:

    Versioning ASP.NET Web API 2 with Media Types

    同样在即将发布的 Web API 2.1(程序集版本 5.1.0.0)中,您可以处理路由级约束(请注意,这与我们已经拥有的“内联”约束不同)版本控制场景。当然,这仅与属性路由有关。

    以下是 2.1 RC 位的示例: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/RoutingConstraintsSample/ReadMe.txt

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2014-09-17
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2014-02-07
      • 2018-05-31
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多