我可以像这样成功地对我的webAPI进行ajax调用:
使用Javascript:
$.ajax({
type: "GET",
url: "api/Breeze/DeleteMaterials",
cache: false,
data: { aa: 'aa', bb: 'bb' },
dataType: "json",
contentType: "application/json; charset=utf-8",
traditional: true,
success: () => { result.resolve(true); },
error: (error) => result.reject(error)
});
Web API:
[System.Web.Http.HttpGet]
public void DeleteMaterials(string aa, string bb)
{
// doing something here
}
效果很好。到达webAPI并且存在值参数。现在我不想保持“GET”调用,因为在这里我正在执行删除服务器端,我需要一个'DELETE'或'POST'。
我知道'DELETE'调用是不可能的,因为它只接受1个参数,对于我的情况我需要传递2个参数。
所以我尝试在之前的代码中用'POST'替换'GET'并且从未到达webAPI,我得到HTTP错误404:找不到。
我已经在所有SO建议中搜索了很多,但没有一个能给我我需要的东西。
有什么想法吗?
感谢。
答案 0 :(得分:8)
的Javascript
$.ajax({
type: "POST",
url: "api/Breeze/DeleteMaterials",
cache: false,
data: JSON.stringify({ aa: 'aa', bb: 'bb' }),
contentType: "application/json; charset=utf-8",
traditional: true,
success: () => { result.resolve(true); },
error: (error) => result.reject(error)
});
Web API
[ActionName("DeleteMaterials")]
[HttpPost]
public void DeleteMaterials(JObject jsonData)
{
dynamic json = jsonData;
string aa= json.aa;
string bb= json.bb;
}
答案 1 :(得分:3)
使用Javascript:
$.ajax({
type: "GET",
url: "api/Breeze/DeleteMaterials",
cache: false,
data: JSON.stringify({ aa: 'aa', bb: 'bb' }),
contentType: "application/json; charset=utf-8",
traditional: true,
success: () => { result.resolve(true); },
error: (error) => result.reject(error)
});
的WebAPI:
public class MyViewModel
{
public string Aa { get; set; }
public string Bb { get; set; }
}
[System.Web.Http.HttpPost]
public void DeleteMaterials(MyViewModel model)
{
// doing some stuffs here
}