在我的Web API上调用POST时遇到困难

时间:2013-08-27 20:34:05

标签: asp.net-web-api

我只是想通过Web API将记录添加到数据库中。

我称之为:

localhost/X/api/Awards/directors/add?awardTitleId=1&personId=10078261&nameId=1651&isOnBallot=1&whoEntered=0&whoChanged=0

路线:

routes.MapHttpRoute(name: "AddDirector", routeTemplate: "api/awards/directors/add/{id}", defaults: new
      {
          controller = "Awards", action = "addDirector"
      });

控制器:

[HttpPost]
    public void addDirector(int awardTitleId, int personId, int nameId, bool isOnBallot, string whoEntered, string whoChanged)
    {
      myConnection.Open();
      var query = "INSERT INTO dbo.AWD_Directors (AwardTitleId, PersonId, NameId, IsOnBallot, WhoEntered, WhoChanged) VALUES (" + awardTitleId + ", " + personId + ", " + nameId + ", " + isOnBallot + ", " + whoEntered + ", " + whoChanged + ")";
      var cmd = new SqlCommand(query, myConnection);
      cmd.ExecuteNonQuery();
      myConnection.Close();
    }

当我尝试在Fiddler上这样做时:

../X/api/Awards/directors/add?awardTitleId=1&personId=10078261&nameId=1651&isOnBallot=1&whoEntered=0&whoChanged=0

我收到以下消息:

{"Message":"The requested resource does not support http method 'POST'."}

有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试以与创建MVC控制器相同的方式创建Web API控制器。 Web API的一个想法是它使用约定将HTTP谓词映射到方法。因此,为了允许POST,您的方法名称只需要以“Post ...”开头。

因此,该路线根本不应包括动词。路由以及URL应该以控制器名称结尾。然后可以通过命名约定或使用属性(例如HttpPost)来确定调用控制器的方法。因此,使用api/{controller}/{id}的默认路由模板并删除网址的“添加”部分应该会有所帮助。

请参阅http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations以获取完整示例。