我有一個Durandal /熱毛巾測試應用程序,我試圖連線。我有下面的ajax調用,但我得到一個404錯誤。MVC Web API沒有從javascript調用ajax
GET HTTP /.../ API /比薩/ GetPizzasByOrderId%22a8926610-a713-494c-bb15-46f6487a01c7%22 404(未找到)
我可以將URL手動更改爲:
http /.../ api/GetPizzasByOrderId?orderId = a8926610-a713-494c-bb15-46f6487a01c7
它的工作原理。 但我想知道爲什麼其他調用不工作或更多,爲什麼ajax搞亂了URL中的參數,而不是像複雜對象那樣的數據。我有一個得到和一個工作得很好的保存。該GET具有零個PARAMS和保存是通過一個複雜的對象
C#網絡API控制器:
public class PizzaController : ApiController
{
[HttpGet]
public IEnumerable<Pizza> GetPizzasByOrderId(Guid orderId)
{
return DATA.GetPizzasByOrderId(orderId);
}
}
JAVASCRIPT:
var dataCall = $.ajax(config.getPizzasByOrderIdUrl, {
data: ko.toJSON(orderId),
type: "get",
contentType: "application/json"
});
我應該改變我JavaScript代碼到下面,並完成它或有沒有更好的方式來與API交談?
var getPizzasByOrderId = function (orderId) {
return Q.when($.getJSON(config.getPizzasByOrderIdUrl + "?orderId=" + orderId));
};
這是正確的。 ASP.NET WebApi根據HTTP動詞,命名參數及其數據類型選擇控制器操作。得到這些錯誤之一,它會返回404。 – Brett
您的代碼塊不起作用。它嘗試在orderId周圍加引號並引發400錯誤。將toJson放在單個參數中沒有意義。 – Boone
雖然這讓我感到困惑。我知道如果我指定了像上面那樣的參數(不包括toJson部分),它可以工作。但是,如果你看看這個答案。 http://stackoverflow.com/questions/14507101/mvc-api-controllers-complex-object-not-getting-populated-from-jquery-ajax-call ...爲什麼我不得不把參數放在那一??它看起來像Web.Api行爲不同,當它只是一個參數而不是一個複雜的對象? – Boone