Sto riscontrando problemi con la mia chiamata ajax che lo ha generato nel mio metodo web.api. Se rimuovo il orderId Guid sia da api che da js, la chiamata arriva al controller, ma l'oggetto pizza è vuoto. Se passo il Guid nell'URL, lo faccio anche al controller ma senza pizza. Spiega perché questo non funziona o aiutami a farlo funzionare.La chiamata Web Api restituisce un errore 404 con GUID passato come parametro
JS:
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 Api:
[HttpPost]
public RequestReturn<Guid> SavePizza(Guid orderId, Pizza pizza)
{
return PizzaRequests.SavePizza(orderId, pizza);
}
JS oggetti:
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# oggetti:
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 Fiddler post acquisizione:
Quindi, fondamentalmente, web.api non è per me. Ho metodi in cui ho bisogno di passare più oggetti. Ad esempio oggetti Pizza, Ordine e Dimensione. E ho provato a passare il Guid nel percorso URI e la Pizza nei dati, e lo ha fatto al mio controller ma l'oggetto Pizza era vuoto. – Boone
No, l'API Web è per tutti. Sono sicuro che i tuoi bisogni possano essere soddisfatti. Hai solo bisogno di capire le regole e giocare da loro! Stai postando 'data: ko.toJSON ({pizza: pizza})'? Se è così, dovresti provare 'data: ko.toJSON (pizza)'. – Badri
Sto facendo i dati: ko.toJSON (pizza). Ho impiegato 3 secondi e ho usato solo un controller regolare con lo stesso codice e ha funzionato perfettamente. Mi sento sempre come se dovessi fare i workaround solo per farlo funzionare. – Boone