我只是想通过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'."}
有人可以帮我一把吗?
答案 0 :(得分:1)
看起来您正在尝试以与创建MVC控制器相同的方式创建Web API控制器。 Web API的一个想法是它使用约定将HTTP谓词映射到方法。因此,为了允许POST,您的方法名称只需要以“Post ...”开头。
因此,该路线根本不应包括动词。路由以及URL应该以控制器名称结尾。然后可以通过命名约定或使用属性(例如HttpPost
)来确定调用控制器的方法。因此,使用api/{controller}/{id}
的默认路由模板并删除网址的“添加”部分应该会有所帮助。