Asp.net web api 在我的Web API上调用帖子有困难

Asp.net web api 在我的Web API上调用帖子有困难,asp.net-web-api,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/dir

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

有人能帮我一下吗?

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

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


请参阅以获取完整示例。

看起来您正在尝试以与创建MVC控制器相同的方式创建Web API控制器。WebAPI的一个想法是,它使用约定将HTTP谓词映射到方法。因此,为了允许POST,您的方法名称只需要以“POST…”开头。不确定问题到底是什么,但您应该从路由中删除
{id}
,因为您没有名为
id
的参数。另外,发布控制器代码的其余部分,因为它可能出于某种原因使用了错误的方法?您的Url中的
X
是虚拟目录吗?还是一个区域?然后尝试路由调试器。太棒了!webapi将动词映射到方法名称的顶部是一种惯例,但这不是一项要求。使用
System.Web.Http.HttpPost
属性装饰方法仍将允许post(并拒绝get)。True。我的回答的主旨是将OP从尝试在路由中使用动词重定向到遵循正常的WebAPI约定。我将进行编辑以使其更清楚。我同意你的说法,url中的
添加
是不必要的,因为http动词
POST
应该足够了。。。而且更“安静”。只是想指出这不是必须的。