将int作为方法的一部分发布但是获取没有找到与请求URI错误匹配的HTTP资源

时间:2013-12-28 13:46:01

标签: c# api asp.net-mvc-4 asp.net-web-api

我正在尝试创建一个MVC WebAPI控制器,它接收一个id,它在数据库中创建一个记录,然后返回。但是,我一直收到错误。

在我的testAPI控制器中,我有:

[HttpPost]
public HttpResponseMessage OpenSession(int id)
{
    //Logic of post in here never gets hit
}

但是,当我尝试发布到API时,我得到以下响应:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:54388/api/testAPI/OpenSession/'.","MessageDetail":"No action was found on the controller 'testAPI' that matches the request."}

我已将路由更改为:

config.Routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "api/{controller}/{action}/"
);

我正在尝试使用有效负载中的值id发布到:http://localhost:54388/api/testAPI/OpenSession/。但是我认为它在网址中有所期待 - 有人可以指出我哪里出错了。

1 个答案:

答案 0 :(得分:3)

当您尝试仅POST一个参数时,WebApi会出现问题。我记得我有同样的问题。有很多方法可以对此进行排序,但每次都有效的方法是使用模型而不是int:

[HttpPost]
public HttpResponseMessage OpenSession(OpenSessionParameters parameters)
{
    //Logic of post in here never gets hit
}

public class OpenSessionParameters
{
    public int Id { get; set; }
}

或者如果你坚持不上课,你可以试试这个:http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
我已经使用了一些,但最终将所有[FromBody]参数替换为模型 - 工作更可靠。