2

我只是想通过 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'."}

有人可以帮帮我吗?

4

1 回答 1

1

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

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

有关完整示例,请参阅http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations

于 2013-08-27T22:37:57.530 回答