将多个参数传递给我的'POST'ajax调用我的webAPI控制器>找不到http 404

时间:2013-12-21 11:05:21

标签: jquery asp.net-web-api

我可以像这样成功地对我的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建议中搜索了很多,但没有一个能给我我需要的东西。

有什么想法吗?

感谢。

2 个答案:

答案 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
    }