2

我已经用谷歌搜索了一整天,但仍然找不到答案。我需要POST通过jQuery.posttoWeb 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' });

任何的想法 ?

编辑:

@Darin:我试过这个:

public class UnitDetails{
    public string id { get; set; }
}

和:

public void Post(UnitDetails id) {
    //body...
}

和:

$.post('api/mycontroller', {id:'string1'});

但是我仍然想念一些东西..它并没有停止Post(...){...}。再次 -Get(...){...}有效..?

4

2 回答 2

6

这是设计使然,使用原始类型(例如字符串)进行此操作的唯一方法如下:

$.post('/api/mycontroller', '=' + encodeURIComponent('val1'));

所以 POST 请求的主体必须包含以下内容:

=val1

代替:

data=val1

这已在此线程中讨论过。

作为替代方案,您可以定义一个视图模型:

public class MyViewModel
{
    public string Data { get; set; }
}

然后让您的控制器操作将此视图模型作为参数:

public void Post(MyViewModel model)
{
    //body...
}

与原始类型相反,复杂类型使用格式化程序而不是模型绑定。下面an article介绍了 Web API 如何进行参数绑定。

于 2012-10-17T09:29:43.533 回答
0

您发布到api/mycontroller. ASP.NET MVC 自动附加“控制器”提供的名称,因此它正在寻找一个名为mycontrollerController. 您的帖子中没有提到您的 API 控制器的名称,但我怀疑不是这样。

假设您的控制器名为“myController”,请尝试发布到api/my.

$.post('api/my', { id: 'string1' });
于 2012-10-17T11:49:01.927 回答