我用Google搜索了一整天,但仍然无法找到答案。我需要通过POST
jQuery.post
向Web API MVC-4
数据routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
但无法提供Controller
数据。这是我的路线:
GET
这是我的 public string Get(int id)
{
return "value";
}
public void Post([FromBody]string data)
{
//body...
}
(jQuery.post:
有效!):
$.post('api/mycontroller', { key1: 'val1' });
这是public class UnitDetails{
public string id { get; set; }
}
public void Post(UnitDetails id) {
//body...
}
有什么想法吗?
@Darin:我试过了:
$.post('api/mycontroller', {id:'string1'});
和
Post(...){...}
和
Get(...){...}
但是我仍然想念它......它不会停留在{{1}}。再次 - {{1}}确实有效..?
答案 0 :(得分:6)
这是设计使用以及使用原始类型(如字符串)进行此操作的唯一方法如下:
$.post('/api/mycontroller', '=' + encodeURIComponent('val1'));
因此POST请求的正文必须包含以下内容:
=val1
而不是:
data=val1
这已在this thread中讨论过。
作为替代方案,您可以定义视图模型:
public class MyViewModel
{
public string Data { get; set; }
}
然后让控制器操作将此视图模型作为参数:
public void Post(MyViewModel model)
{
//body...
}
与原始类型相反,复杂类型使用格式化程序而不是模型绑定。这里是an article
,它介绍了Web API如何进行参数绑定。
答案 1 :(得分:0)
您要发布到api/mycontroller
。 ASP.NET MVC自动附加“Controller”提供的名称,因此它正在寻找名为mycontrollerController
的控制器。您的帖子中未提及您的API控制器的名称,但我怀疑它不是。
假设您的控制器名为“myController”,请尝试发布到api/my
。
$.post('api/my', { id: 'string1' });