Estoy comenzando con WebAPI y la mayor parte de todo va bien. Estoy corriendo en un problema con una función en particular. Esto difiere de los otros porque es el único parámetro es de tipo IEnumerable.

He establecer un punto de interrupción en la primera línea del Post() la función y me echo en la función, pero los «valores» de los parámetros SIEMPRE tiene un número de 0. He comprobado que el parámetro que va en el lado del cliente, de hecho, contienen una matriz de números enteros. Si puedo quitar el [FromUri] atributo, los ‘valores’ parámetro es NULL en lugar de un número de 0.

¿Cómo puedo obtener mi array de enteros a venir a través de mi WebAPI función?

Aquí está el WebAPI función:

[System.Web.Mvc.HttpPost]
public void Post([FromUri] IEnumerable<int> values)
{
    if (values == null || !values.Any()) return;

    int sortorder = 1;
    foreach (int photoId in values)
    {
        _horseRepository.UpdateSortOrder(photoId, sortorder);
        sortorder++;
    }
}

Aquí está la llamada AJAX (esto es el uso de la interfaz de usuario jQuery que se puede Ordenar característica):

$(".sortable").sortable({
    update: function (event, ui) {
                var newArray = $(".sortable").sortable("toArray");

                $.ajax({
                    url: '/api/photo',
                    type: 'POST',
                    contentType: 'application/json, charset=utf-8',
                    async: true,
                    dataType: 'json',
                    data: JSON.stringify(newArray),
                    complete: function (data) { }
                });
            }
        });
InformationsquelleAutor Scott | 2013-01-03

1 Comentario

  1. 10
    contentType: 'application/json, charset=utf-8',

    debe ser (el separador entre el tipo de contenido y el juego de caracteres es un punto y coma, no una coma):

    contentType: 'application/json; charset=utf-8',

    y:

    public void Post([FromUri] IEnumerable<int> values)

    debe ser (no hay parámetros Uri en una petición POST):

    public void Post(IEnumerable<int> values)

    Ahora que son buenos para ir asumiendo que newArray (que no se muestra aquí) es una matriz de enteros:

    newArray = [ 1, 2, 3 ]
    • Las cifras se trataba de algo tan estúpido como una coma que debe ser un semi-colon (el código originalmente fue escrito sin [FromUri], que se añadió como parte de mis intentos de depuración). Gracias!
    • Es posible extraer Uri parámetros de una petición POST, es este caso de uso que debe ser desde el cuerpo, es decir, public void Post([FromBody] IEnumerable<int> valores).

Dejar respuesta

Please enter your comment!
Please enter your name here