2016-05-24 23 views
1

基於來自ODataSamples-master odata示例的DynamicEdmModelCreation項目,並遵循問題中收到的幫助 Handle Odata /entityset/key/navigation 我們現在需要公開帶參數的動態Actions和Funcions。爲了支持我們在GetModel做綁定功能功能如下:Handle OData函數參數

var GetSum = new EdmFunction("ns", "GetSum", 
      new EdmPrimitiveTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Double), false), 
      false, null, true); 
GetSum.AddParameter("param1", 
      new EdmPrimitiveTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Double), 
      false)); 
GetSum.AddParameter("param2", 
      new EdmPrimitiveTypeReference(EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Double), 
      false)); 

model.AddElement(GetSum); 
container.AddFunctionImport(GetSum); 

,並在SelectAction方法我們就把:

if (odataPath.Segments.Count > 0 && 
      odataPath.Segments.Last() is UnboundFunctionPathSegment && 
      odataPath.Segments.Last().ToString().Contains("GetSum")) 
      return "ExecuteFunction"; 

最後控制器具有

[HttpGet] 
[HttpPost] 
public IHttpActionResult ExecuteFunction(ODataActionParameters parameters) 
{ 
    ... 
} 

現在測試服務:

http://localhost:2900/odata/GetSum(param1=1,param2=2) 

一切工作正常,除了參數,他們總是輸入爲空。有什麼我們缺少的支持參數?

回答

1

您聲明功能,但在控制它的一個動作,根據http://odata.github.io/WebApi/#04-06-function-parameter-support,它應該是

[HttpGet] 
public string ExecuteFunction(double p1, double p2) 
{ 
    ... 
} 

在控制器

+0

的問題是,在我的代碼中的OData模型,操作和功能都像DynamicEdmModelCreation項目一樣動態,所以我無法設置特定於該odata函數的簽名。 – Mao