【问题标题】:Asp.Net Core 3.1 OData doesn't work with attribute routing and function with parametersAsp.Net Core 3.1 OData 不适用于属性路由和带参数的函数
【发布时间】:2021-01-25 13:27:23
【问题描述】:

Asp.Net Core 3.1和Microsoft.AspNetCore.OData 7.3.0版是否可以实现如下路线:

/ParentEntity({id})/Children(OnlyActive={onlyActive})

我的成就:

控制器的方法:

[HttpGet]
[ODataRoute("ParentEntity({id})/Children")]
public async Task<IActionResult> Children([FromODataUri] string id)
{
    // some data fetching operations.
}

具有以下模型配置:

builder.EntityType<ParentEntity>().Function("Children")
                .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");

工作正常,我可以在 Children 方法中获取 id 参数。

但是当我尝试做类似的事情时:

[HttpGet]
[ODataRoute("ParentEntity({id})/Children(OnlyActive={onlyActive})")]
public async Task<IActionResult> Children([FromODataUri] string id, [FromODataUri] bool onlyActive)
{
   // some data fetching operations.
}

带模型配置:

FunctionConfiguration getFunc = builder.EntityType<ParentEntity>().Function("Children")
                    .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");

getFunc.Parameter<bool>("OnlyActive");

我收到了错误:

Microsoft.OData.ODataException:“错误请求 - 查询语法错误”

是否可以通过这种方式使用 Odata 函数?还是我应该尝试其他方法?

【问题讨论】:

    标签: asp.net-core odata asp.net-core-3.1


    【解决方案1】:

    我能够通过在ODataRoute 属性的路径中指定“Deafult”命名空间来实现此行为。

    经过大量尝试,这对我有用:

    [HttpGet]
    [ODataRoute("ParentEntity({id})/Default.Children(OnlyActive={onlyActive})")]
    public async Task<IActionResult> Children([FromODataUri]string id, [FromODataUri]bool onlyActive)
    

    模型配置:

    FunctionConfiguration getFunc = builder.EntityType<ParentEntity>().Function("Children")
                        .ReturnsCollectionFromEntitySet<ChildEntity>("ChildEntity");
    
    getFunc.Parameter<bool>("OnlyActive");
    

    我在this tutorial by Sam Xu 中找到了带参数的绑定函数示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2021-02-28
      • 2021-01-19
      • 1970-01-01
      • 2015-10-09
      • 2021-09-04
      • 2021-02-01
      相关资源
      最近更新 更多