簡體   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