9

这是我的 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)

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

有什么想法或建议吗?

编辑:

客户端 JavaScript:

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

2 回答 2

8

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

[HttpPost]
public void PostIncreaseViewCounter([FromBody]int id)
{
}
于 2015-11-24T08:15:15.837 回答
7

一旦你添加{action}到你的路由中,使用方法名称前缀来确定获取/发布功能的“神奇”代码将不起作用。

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

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

// equivalent to:
[HttpPost]
public HttpResponseMessage DefaultAction(MyClass obj)
{
    // ...
}

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

于 2013-09-16T23:21:20.653 回答