Mam problem z wywołaniem ajax wywołując go w mojej metodzie web.api. Jeśli usunę Guid orderId zarówno z api, jak i js, wywołanie spowoduje przejście do kontrolera, ale obiekt pizzy jest pusty. Jeśli przekażę Guid w adresie URL, przejdzie on również do kontrolera, ale bez pizzy. Wyjaśnij, dlaczego to nie działa lub pomóż mi to zrobić.Web Api wywołuje błąd 404 z identyfikatorem GUID przekazanym jako parametr
JS: API
var savePizza = function (orderId, pizza) {
var dataCall = $.ajax(config.savePizzaUrl, {
data: ko.toJSON({ orderId: orderId, pizza: pizza }),
type: "post",
contentType: "application/json"
});
return Q.when(dataCall);
};
Web:
[HttpPost]
public RequestReturn<Guid> SavePizza(Guid orderId, Pizza pizza)
{
return PizzaRequests.SavePizza(orderId, pizza);
}
JS Przedmioty:
var pizza = function (data) {
this.Id = data.Id;
this.Size = new size(data.Size);
this.SizeId = data.SizeId;
this.Toppings = $.map(data.Toppings, function(item) {return new topping(item);});
};
var topping = function (data) {
this.Id = data.Id;
this.Name = data.Name;
this.Price = data.Price;
};
var size = function (data) {
this.Id = data.Id;
this.Name = data.Name;
this.Price = data.Price;
};
C# obiektów:
public class Pizza
{
public Guid Id { get; set; }
public Guid SizeId { get; set; }
public Size Size { get; set; }
public IEnumerable<Topping> Toppings { get; set; }
}
public class Size
{
public Guid Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
public class Topping
{
public Guid Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
JSON Skrzypek post Przechwytywanie:
Więc zasadniczo web.api nie jest dla mnie. Mam metody, w których muszę przekazać wiele obiektów. Na przykład obiekty Pizza, zamówienie i rozmiar. I próbowałem przekazać Guidowi w ścieżce URI i Pizza w Danych, i udało mi się dostać do kontrolera, ale obiekt Pizza był pusty. – Boone
Nie, web API jest dla każdego. Jestem pewien, że twoje potrzeby mogą zostać zaspokojone. Musisz tylko zrozumieć zasady i grać przez nich! Czy publikujesz 'dane: ko.toJSON ({pizza: pizza})'? Jeśli tak, powinieneś wypróbować 'data: ko.toJSON (pizza)'. – Badri
Robię dane: ko.toJSON (pizza). Spędziłem 3 sekundy i użyłem zwykłego kontrolera z tym samym kodem i zadziałało idealnie. Po prostu zawsze czuję, że muszę robić obejścia tylko po to, żeby to działało. – Boone