2014-03-07 68 views
0

我有一個工作的OData實現與典型的雙向航線設置:如何爲給定的實體類型生成絕對OData URL?

var builder = new ODataConventionModelBuilder(); 
builder.EntitySet<Person>("People"); 

configuration.Routes.MapODataRoute(routeName:"OData", routePrefix:"odata", model:builder.GetEdmModel()); 

我正在尋找一種方式來編程生成一個註冊的法人實體的絕對URL設置從任何OData的行動之外。例如,我想要請求OData端點的Person類型並取回"http://host/odata/People"

由於OData路由是基於約定的,因此標準URL助手似乎不適用。

+0

你是什麼意思?「我想爲Person類型請求OData端點並取回'http:// host/odata/People'」?請求是什麼? – Schandlich

回答

1

您可能希望利用由ODataConventionModelBuilder.GetEdmModel()生成的IEdmModel實例。

IEdmModel model = builder.GetEdmModel(); // the builder is what you defined in the question. 
var entitySetName = ""; 
foreach (var temp in model.FindEntityContainer("Container").EntitySets()) 
{ 
    if (temp.ElementType.Name == "Person") 
    { 
     entitySetName = temp.Name; 
     break; 
    } 
} 
return "http://host/odata/"+entitySetName; 

注意:如果你定義的實體類型設置多個實體上的代碼只返回第一個。

+0

一般來說,建議使用'String.Concat()'或'String.Format()'來構建字符串,而不是'+';性能明顯好於一開始。在這種情況下,可以肯定的是,影響將是最小的,但最好是堅持這個習慣。 – anaximander

相關問題