2014-09-24 42 views
1

这里的时候,我得到一个404我的Ajax调用发出一个Ajax调用

$.ajax({ 
    async: false, 
     url: "/api/clients/UpdateResourceContactProductsByResourceContactId/" + id, 
    type: 'POST', 
    data: { strIds: strIds }, 
    success: function (data) { 
    } 
}); 

其中id是整数,strIds是整数的字符串contantenation,它们看起来像123_254_741_6650 ...

而这个服务器端代码......

[HttpPost] 
public IHttpActionResult UpdateResourceContactProductsByResourceContactId 
     (int id, string strIds) 
{ 
    //... 
} 

当我打的更新按钮,我收到以下错误:

{"Message":"No HTTP resource was found that matches the request URI 
'http://localhost/api/clients/UpdateResourceContactProductsByResourceContactId/22757'.", 
"MessageDetail":"No action was found on the controller 'Clients' that matches the request."} 

我错过了什么吗?

+2

您是否尝试过的URL: “/ API /客户/ UpdateResourceContactProductsByResourceContactId ID =” +编号+ “&strIds =” + strIds, – artm 2014-09-24 19:28:26

+2

作为@artm说 - 你可以直接导航到'HTTP://本地主机/ API /客户/ UpdateResourceContactProductsByResourceContactId/22757'?如果你真的得到了'404',那么Ajax本身不是责任。 – admdrew 2014-09-24 19:29:22

+1

嗯,我可以告诉你,它不是一个字符串被传递给你的控制器,这是肯定的,因为你发送它作为'POST'的一部分。路由器不会将'strIds'解析为URL的参数,因为它是通过'HTTP BODY'而不是'URL'传递的。就像@artm说的那样,将strIds声明移到URL concocuation中。 – Ohgodwhy 2014-09-24 19:29:56

回答

0

尝试......

$.ajax({ 
    async: false, 
    url: "/api/clients/UpdateResourceContactProductsByResourceContactId", 
    type: 'POST', 
    data: { id: id, strIds: strIds }, 
    success: function (data) { 
    } 
}); 
+0

我再次404。 – Richard77 2014-09-24 19:41:49

0

我想你传递的数据是错误的。你正在传递一个对象。或者将方法更改为接受JObject,并使用动态将strIds拉出,单独传递字符串或将其用作URL参数。

//example using JObject below 
[HttpPost] 
public IHttpActionResult UpdateResourceContactProductsByResourceContactId(int id, JObject data)//JObject requires Json.NET 
{ 
    dynamic json = data; 
    string ids = json.strIds 
} 

如果你要发布你需要在JavaScript调用过上JSON.stringify它的对象。

var data = JSON.stringify({ strIds: strIds }); 
$.ajax({ 
    async: false, 
     url: "/api/clients/UpdateResourceContactProductsByResourceContactId/" + id, 
    type: 'POST', 
    data: data, 
    success: function (data) { 
    } 
});