处理OData函数参数

时间:2016-05-24 22:10:55

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

基于来自ODataSamples-master odata示例的DynamicEdmModelCreation项目并遵循问题中收到的帮助 Handle Odata /entityset/key/navigation 我们现在需要使用参数公开动态Actions和Funcions。为了支持我们在GetModel函数中进行的未绑定函数:

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)

除参数外,一切正常,它们总是以null形式输入。我们缺少哪些东西来支持这些参数?

1 个答案:

答案 0 :(得分:1)

你正在声明一个函数,但是在控制器中它是一个动作,根据http://odata.github.io/WebApi/#04-06-function-parameter-support,它应该是

[HttpGet]
public string ExecuteFunction(double p1, double p2)
{
   ...
}
控制器中的