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.

C# / ASP.NET Core Web API: ¿cómo pasar un parámetro de tipo lista?

Estoy tratando de pasar un parámetro de tipo lista a una API web ASP.NET Core 5.

Aquí está mi punto final:

[ApiController]
[Route("[controller]")]
public class InvoiceController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public InvoiceController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpPost]
    public List<customerinvoice> Post(string[] CustomerNumbers, DateTime OrderDateFrom, DateTime OrderDateTo)
    {
    }
}

El envío de una solicitud POST en formato JSON falla con el siguiente error:

No se pudo convertir el valor JSON a System.String[]. Ruta: $ | Número de línea: 0 | Posición de bytes en línea: 1.

Y aquí está la solicitud:

{
    "CustomerNumbers": ["test"],
    "OrderDateFrom": "2021-01-01",
    "OrderDateTo": "2021-11-02"
}

En lugar de usar un arreglo de strings, también intenté usar List<string>. Obtuve el mismo error.

¿Alguna idea de por qué el framework no comprende cómo recibir una lista?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para pasar un parámetro de lista a una API web ASP.NET Core 5, el parámetro debe estar marcado con el atributo [FromBody] en el método del controlador. En este caso, el parámetro CustomerNumbers debe actualizarse a:

    public List<customerinvoice> Post([FromBody] List<string> CustomerNumbers, DateTime OrderDateFrom, DateTime OrderDateTo)
    

    Además, la carga JSON debe actualizarse a:

    {
        "CustomerNumbers": ["test"],
        "OrderDateFrom": "2021-01-01",
        "OrderDateTo": "2021-11-02"
    }
    

    Observa el uso del atributo [FromBody] y también el cambio de string[] a List<string> en el parámetro del método Post. La carga JSON debe tener la misma estructura que la firma del método actualizada, donde CustomerNumbers es un array de cadenas representado como ["test"] en este caso.

Comments are closed.