如何在asp.net web api中使用接收POST数据?

时间:2012-10-17 09:28:47

标签: c#-4.0 jquery asp.net-mvc-4 asp.net-web-api

我用Google搜索了一整天,但仍然无法找到答案。我需要通过POST jQuery.postWeb 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}}确实有效..?

2 个答案:

答案 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' });