gpt4 book ai didi

c# - OData Unbound 函数发送和接收原始集合

转载 作者:太空狗 更新时间:2023-10-30 01:04:00 26 4
gpt4 key购买 nike

需要一个关于如何将原始类型集合传递给未绑定(bind)函数/或操作以及如何返回原始类型集合的示例。
例如整数列表或数组。
这是一个简单的例子。

List<int> GetEvenNumbers(List<int> numbers)
{
// loop through numbers collection and return a list of the even numbers
}

以下站点讨论使用函数/操作但不解释传递/接收集合。

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

https://aspnet.codeplex.com/sourcecontrol/latest#Samples/WebApi/OData/v4/

我什至在“Show Me How With Code”上发布了一个建议,但没有收到回复。
http://aspnet.uservoice.com/forums/228522-show-me-how-with-code/suggestions/6264729-odata-v4-passing-collection-as-parameter-to-unbou

这是我的一些代码,但它似乎不起作用。

// in the controller
[HttpGet]
[ODataRoute("GetEvenNumbers(numbers={numbers})")]
public IHttpActionResult GetEvenNumbers(List<int> numbers)
{
List<int> evenNumbers = new List<int>();
foreach (var number in numbers)
{
if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}
return Ok(evenNumbers);
}

// in the WebApiConfig
var testCollectionFunction = builder.Function("GetEvenNumbers");
testCollectionFunction.CollectionParameter<int>("numbers");
testCollectionFunction.ReturnsCollection<int>();

在 WCF 中这非常简单,但在 OData 中就没那么简单了。

最佳答案

据我所知,webapi odata不允许函数参数中的集合。但您可以使用 Actions 作为解决方法。

模型构建器:

        var testCollectionFunction = modelBuilder.Action("GetEvenNumbers");
testCollectionFunction.CollectionParameter<int>("numbers");
testCollectionFunction.ReturnsCollection<int>();

Controller :

    [HttpPost]
[ODataRoute("GetEvenNumbers")]
public IHttpActionResult GetEvenNumbers(ODataActionParameters parameter)
{
IEnumerable<int> numbers = parameter["numbers"] as IEnumerable<int>;
List<int> evenNumbers = new List<int>();
foreach (var number in numbers)
{
if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}
return Ok(evenNumbers);
}

要求:

POST http://localhost:44221/odata/GetEvenNumbers HTTP/1.1
Host: localhost:44221
Connection: keep-alive
Content-Length: 17

{"numbers":[1,2]}

响应:

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=full
OData-Version: 4.0
Content-Length: 109

{
"@odata.context":"http://localhost:44221/odata/$metadata#Collection(Edm.Int32)","value":[
2
]
}

关于c# - OData Unbound 函数发送和接收原始集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25208443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com