【问题标题】:Accepting primitive array as OData action parameter接受原始数组作为 OData 操作参数
【发布时间】:2022-01-11 07:36:53
【问题描述】:

我想将 int 数组作为参数传递给 ASP.NET OData 路由,但无法使其工作。

我尝试了以下方法:

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers={numbers})")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers(int[] numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers=[{numbers}])")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers(int[] numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers={numbers})")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers(IEnumerable<int> numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers=[{numbers}])")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers(IEnumerable<int> numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers={numbers})")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers([FromODataUri] int[] numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers=[{numbers}])")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers([FromODataUri] int[] numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers={numbers})")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers([FromODataUri] IEnumerable<int> numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers=[{numbers}])")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers([FromODataUri] IEnumerable<int> numbers)
{
    // snip
}

[ODataRoute("IWantMeSomeNumbers/GetForNumbers()")]
public IQueryable<IAmAnAppropriateResponse> GetForNumbers(ODataActionParameters parameters)
{
    // snip
}

在每种情况下,我都会收到以下错误:

The path template 'IWantMeSomeNumbers/GetForNumbers(numbers={numbers})' on the action 'GetForNumbers' in controller 'IWantMeSomeNumbers' is not a valid OData path template. Bad Request - Error in query syntax.

谁能告诉我这是否可行,如果可以,我做错了什么??

【问题讨论】:

    标签: c# asp.net routes odata


    【解决方案1】:

    所以,原来我只是被误导了,需要在构建器上定义EntityType.CollectionParameter&lt;int&gt;

    ODataModelBuilder builder = new ODataConventionModelBuilder();
    // snip
    builder.EntityType<IAmAnAppropriateResponse>().Collection.Function(nameof(IWantMeSomeNumbersController.GetForNumbers))
        .ReturnsCollection<IAmAnAppropriateResponse>()
        .CollectionParameter<int>("numbers");
    

    与以下方法签名配对,一切都按要求工作:

    [HttpGet]
    [ODataRoute("IWantMeSomeNumbers/GetForNumbers(numbers={numbers})")]
    public IQueryable<IAmAnAppropriateResponse> GetForNumbers([FromODataUri] int[] numbers)
    {
        // snip
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 2012-03-19
      • 2023-03-24
      • 2014-10-06
      • 1970-01-01
      • 2019-10-28
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多