【问题标题】:Handle OData functions parameters处理 OData 函数参数
【发布时间】:2016-09-22 07:47:50
【问题描述】:

基于 ODataSamples-master odata 示例中的 DynamicEdmModelCreation 项目并遵循问题中收到的帮助 Handle Odata /entityset/key/navigation 我们现在需要公开带有参数的动态动作和函数。为了支持未绑定的函数,我们在 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)

除参数外,一切正常,它们始终输入为空。我们缺少什么来支持这些参数吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    在控制器中

    【讨论】:

    • 问题在于,在我的代码中,odata 模型、操作和函数是动态的,就像 DynamicEdmModelCreation 项目一样,所以我无法设置特定于该 odata 函数的签名。
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 2018-08-03
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多