2013-01-03 12 views
12

Zaczynam od WebAPI i w większości przypadków wszystko idzie dobrze. Występuje problem z jedną konkretną funkcją. Ten różni się od drugiego, ponieważ jego jedynym parametrem jest typ IEnumerable.Przekazywanie parametru IEnumerable do WebAPI

Ustawiłem punkt przerwania w pierwszym wierszu funkcji Post() i wybieram funkcję, ale parametr "wartości" ZAWSZE ma wartość 0. Zweryfikowałem, że parametr jest wprowadzany do klienta strona faktycznie zawiera tablicę liczb całkowitych. Po usunięciu atrybutu [FromUri] parametr "values" ma wartość NULL zamiast wartości 0.

Jak uzyskać tablicę liczb całkowitych do przejścia przez moją funkcję WebAPI?

Oto funkcja WebAPI:

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

Oto wywołanie AJAX (jest to za pomocą funkcji jQuery UI sortable):

$(".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) { } 
       }); 
      } 
     }); 

Odpowiedz

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

powinna stać (separator pomiędzy zawartością typ i zestaw znaków to średnik, a nie przecinek):

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

oraz:

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

powinny stać się (istnieją żadne parametry URI żądania POST):

public void Post(IEnumerable<int> values) 

Teraz jesteś dobry, aby przejść przy założeniu, że newArray (które nie zostały tutaj pokazane) jest tablicą liczb całkowitych:

newArray = [ 1, 2, 3 ] 
+0

Dane to było coś tak głupiego jak przecinek, który powinien być średnikiem (kod pierwotnie został napisany bez [F] romUri], który został dodany jako część moich prób debugowania). Dzięki! – Scott

+0

@Darin Możliwe jest wyodrębnienie parametrów URI z żądania POST; Jest to tylko ten przypadek użycia, który powinien pochodzić z ciała, tj. Z publicznych pustych wpisów ([FromBody] IEnumerable wartości). –

Powiązane problemy