为什么在ASP.NET Web API中找不到我的POST操作?

Val*_*ter 8 c# asp.net asp.net-web-api

这是我的DefaultApi配置:

config.Routes.MapHttpRoute(
   name: "DefaultApi",
   routeTemplate: "api/{controller}/{id}/{action}",
   defaults: new { action = "DefaultAction", id = RouteParameter.Optional }
);

[ActionName("DefaultAction")]
public HttpResponseMessage Get(string id)

[ActionName("DefaultAction")]
public HttpResponseMessage Post(MyClass obj)
Run Code Online (Sandbox Code Playgroud)

怎么GET工作,但使用POST我得到一个404 Not Found错误?

任何想法或建议?

编辑:

客户端JavaScript:

$.ajax({
    type: "POST",
    url: "@Url.Content("~/api/controllername")",
    data: args,
    200: function (data) {
          ......
        }
});
Run Code Online (Sandbox Code Playgroud)

Tim*_*ers 7

一旦添加{action}到您的路线,使用方法名称的前缀来确定获取/发布功能的"神奇"代码不起作用.

您需要为方法添加[HttpPost]属性Post(MyClass obj):

[HttpPost]
[ActionName("DefaultAction")]
public HttpResponseMessage Post(MyClass obj)
{
    // ...
}

// equivalent to:
[HttpPost]
public HttpResponseMessage DefaultAction(MyClass obj)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的方法名称可用于定义操作名称,因此您可以根据使用的路径重命名方法,而不是使用ActionName属性.


Jen*_*lly 7

我有一个类似的问题,解决方案是添加[FromBody]到方法的参数像这样:

[HttpPost]
public void PostIncreaseViewCounter([FromBody]int id)
{
}
Run Code Online (Sandbox Code Playgroud)