es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aceptando una matriz primitiva como parámetro de acción OData.

Me gustaría pasar una matriz de enteros a una ruta ASP.NET OData como parámetro y no puedo hacer que funcione.

He intentado lo siguiente:

[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
}

En todos y cada uno de los casos, recibo el siguiente error:

La plantilla de ruta 'IWantMeSomeNumbers/GetForNumbers(numbers={numbers})' en la acción 'GetForNumbers' en el controlador 'IWantMeSomeNumbers' no es una plantilla de ruta OData válida. Solicitud incorrecta: error en la sintaxis de la consulta.

¿Alguien puede decirme si esto es posible y, de ser así, qué estoy haciendo mal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible pasar una matriz de int a una ruta ASP.NET OData como parámetro. La sintaxis correcta para la definición de la ruta OData es:

    [ODataRoute("QuieroAlgunosNumeros/ObtenerParaNumeros(numeros={numeros})")]
    public IQueryable<soyunarespuestaapropiada> ObtenerParaNumeros([FromODataUri] int[] numeros)
    {
        // snip
    }
    

    En este caso, el parámetro numeros está marcado con el atributo [FromODataUri]. Este atributo le indica al marco de trabajo ASP.NET OData que el parámetro debe obtenerse de la URI de la solicitud.

    Al llamar a esta ruta, el cliente debe usar el siguiente formato de URL:

    http://ejemplo.com/QuieroAlgunosNumeros/ObtenerParaNumeros(numeros=1,2,3,4,5)
    

    Debes tener en cuenta que la matriz de valores int se pasa como una lista separada por comas en la URL.

Comments are closed.