自定义 OData v4 函数始终 returns 406
custom OData v4 function always returns 406
所以我试图将此方法映射为 Odata 函数...
[HttpGet]
[EnableQuery]
public IHttpActionResult ForBuyerOrganisations([FromUri]int[] orgIds)
{
// this returns IQueryable<TRDetails>
// i tried throwing a ToList on there too to ensure it works and it does
var result = service.ForBuyerOrgs(orgIds);
return Ok(result);
}
我是这样映射的...
var forBuyers = Builder.EntityType<TRDetails>().Collection.Function("ForBuyerOrganisations");
forBuyers.ReturnsCollection<TRDetails>();
forBuyers.CollectionParameter<int>("orgIds");
...我也试过这个...
var forBuyers = Builder.EntityType<TRDetails>().Collection.Function("ForBuyerOrganisations");
forBuyers.ReturnsCollectionFromEntitySet<TRDetails>();
forBuyers.CollectionParameter<int>("orgIds");
我可以用 url 调用它:
~/TRDetails/ForBuyerOrganisations?orgIds=1
问题:
请求执行我的代码和returns来自这个方法,然后客户端得到一个 406。
有什么想法吗?
如果 TRDetails 是实体集,
forBuyers.ReturnsCollectionFromEntitySet<TRDetails>("TRDetails");
我想你忘记了实体集的名称。
是的。 @Ouyang 表示配置错误。另外,据我看来,还有另外四个错误:
- 您应该使用 [FromODataUri],而不是 [FromUri] 作为参数。
您应该调用带有命名空间限定的函数。
TRDetails/Namespace.ForBuyerOrganisations(...)
您应该将参数设置为列表,因为您将其配置为集合。
- 您应该使用 () 作为参数调用该函数。
因此,以下请求是示例请求:
~/TRDetails/Default.ForBuyerOrganisations(orgIds=[5,4,2,3,1])
所以我试图将此方法映射为 Odata 函数...
[HttpGet]
[EnableQuery]
public IHttpActionResult ForBuyerOrganisations([FromUri]int[] orgIds)
{
// this returns IQueryable<TRDetails>
// i tried throwing a ToList on there too to ensure it works and it does
var result = service.ForBuyerOrgs(orgIds);
return Ok(result);
}
我是这样映射的...
var forBuyers = Builder.EntityType<TRDetails>().Collection.Function("ForBuyerOrganisations");
forBuyers.ReturnsCollection<TRDetails>();
forBuyers.CollectionParameter<int>("orgIds");
...我也试过这个...
var forBuyers = Builder.EntityType<TRDetails>().Collection.Function("ForBuyerOrganisations");
forBuyers.ReturnsCollectionFromEntitySet<TRDetails>();
forBuyers.CollectionParameter<int>("orgIds");
我可以用 url 调用它:
~/TRDetails/ForBuyerOrganisations?orgIds=1
问题:
请求执行我的代码和returns来自这个方法,然后客户端得到一个 406。
有什么想法吗?
如果 TRDetails 是实体集,
forBuyers.ReturnsCollectionFromEntitySet<TRDetails>("TRDetails");
我想你忘记了实体集的名称。
是的。 @Ouyang 表示配置错误。另外,据我看来,还有另外四个错误:
- 您应该使用 [FromODataUri],而不是 [FromUri] 作为参数。
您应该调用带有命名空间限定的函数。
TRDetails/Namespace.ForBuyerOrganisations(...)
您应该将参数设置为列表,因为您将其配置为集合。
- 您应该使用 () 作为参数调用该函数。
因此,以下请求是示例请求:
~/TRDetails/Default.ForBuyerOrganisations(orgIds=[5,4,2,3,1])