繁体   English   中英

webApi2 Odata v3和V4并排

[英]webApi2 Odata v3 and V4 side by side

我怎样才能让odata v3和v4 api在同一个项目上并排工作?

同一个控制器可以返回两种格式的数据吗? 我是否需要拥有同一个控制器的2个副本 - 每个Odata版本一个?

我知道这应该是可能的,因为官方WEBAPI页面说它是专为。

“ASP.NET Web API支持协议的v3和v4。你甚至可以拥有一个与v3端点并行运行的v4端点。” - 来自www.asp.net的报价

问题是 - 我该怎么做? 任何教程?

这是一个并排的示例: https ://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataSxSSample/,FYI。 此示例包含同一控制器的2个副本。

是的,你确实需要两套控制器。 V4不提供向后兼容性。

还有另一个版本控制示例: https//aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataVersioningSample/

这是适合您的解决方案。 您为OData V3创建了第一个版本(〜/ api / v1 /),为V4创建了第二个版本(~api / v2 /)。 它提供了更好的分离。

它取决于OData实现。 我知道WCF支持OData-Version标头:

http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html#_Toc372793615

客户端可以使用它来指定它想要的版本,WCF将仅使用1个端点进行适当的操作。

另一方面,WebAPI,我不知道,但它可能值得测试。

要总结一些非常简单而无需下载示例的步骤,请为v3安装Microsoft.AspNet.WebApi.Odata,为v4安装Microsoft.AspNet.OData。 从使用默认约定的v3和v4开始,您将找到重复的控制器名称。 从这里,将v3默认路由前缀更改为“odata / v3”(不是必需但推荐),对于v4,将默认路由前缀设置为“odata / v4”,并将控制器重命名为MyEntityV4Controller。 此时,尝试使用路由属性来解决错误将导致http 406结果。 相反,创建一个类:

public class CustomControllerRoutingConvention : IODataRoutingConvention
{
    public string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
    {
        return null;
    }

    public string SelectController(ODataPath odataPath, HttpRequestMessage request)
    {
        if (odataPath.EdmType == null)
            return null;
        var path = odataPath.Segments.OfType<EntitySetPathSegment>().SingleOrDefault();
        if (path == null)
        {
            return null;
        }
        return path.EntitySetName + "V4";
    }
}

并使用它:

config.MapODataServiceRoute(
            "odatav4",
            "odata/v4",
            builder.GetEdmModel(),
            new DefaultODataPathHandler(),
            routingConventions);

从这里你可以浏览odata / v3 / MyEntitys和odata / v4 / MyEntitys等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM