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

本文关键字:POST 操作 ASP NET 我的 找不到 Web API 为什么 | 更新日期: 2023-09-27 18:31:44

这是我的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) {
          ......
        }
});

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

我遇到了类似的问题,解决方案是将[FromBody]添加到方法的参数中,如下所示:

[HttpPost]
public void PostIncreaseViewCounter([FromBody]int id)
{
}

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

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

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

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