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

C# 4.0 如何在asp.net web api中使用接收POST数据?,c#-4.0,jquery,asp.net-mvc-4,asp.net-web-api,C# 4.0,Jquery,Asp.net Mvc 4,Asp.net Web Api,我在谷歌上搜索了一整天,但还是找不到答案。我需要通过jQueryPOST发布数据。POST到webapi MVC-4但无法。这是我的路线: routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id =

我在谷歌上搜索了一整天,但还是找不到答案。我需要通过
jQuery
POST
发布数据。POST
webapi MVC-4
但无法。这是我的路线:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这是我的
控制器
GET
工作!):

这是jQuery的
post:

$.post('api/mycontroller', { key1: 'val1' });
有什么想法吗

编辑: @达林:我试过这个:

public class UnitDetails{
    public string id { get; set; }
}
以及:

以及:


但我还是错过了一些东西。。它不会在
Post(…){…}
中停止。再次-
Get(…){…}
是否有效

这是通过设计实现的,使用基本类型(如字符串)执行此操作的唯一方法是:

$.post('/api/mycontroller', '=' + encodeURIComponent('val1'));
=val1
因此,POST请求的正文必须包含以下内容:

$.post('/api/mycontroller', '=' + encodeURIComponent('val1'));
=val1
而不是:

data=val1
这一点已在中讨论过

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

public class MyViewModel
{
    public string Data { get; set; }
}
然后让控制器操作将此视图模型作为参数:

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

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

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

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

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

我尝试了您的建议(请参见上面问题的编辑部分),但没有成功。请将您的操作参数重命名为与
id
不同的名称。例如:
public void Post(UnitDetails details){…}
有API控制器的特殊路由,可以通过
maphttroute
而不是
MapRoute
识别。默认情况下,它们在App_Start/WebApiConfig.cs中定义。此路由配置看起来像什么?
$.post('api/my', { id: 'string1' });