Web Api 始终在控制器方法上接受 POST 动词

Web Api always accept POST verb on controller methods

使用动作名称路由,例如:

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

我希望我所有的控制器方法都接受 POST 动词,有没有办法配置路由映射,这样我就不需要为所有控制器方法添加 HttpPost 属性?

我希望做这样的事情:

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

而不是:

public class MyController: ApiController
 {
     [HttpPost]
     public List<int> GetItems() { ... } 

     [HttpPost]
     public void DeleteItem(int id) { ... }

     [HttpPost]
     public void OtherMethod() { ... }
 }

如果方法名称以 Get、Delete 等动词开头,则默认动词将与之匹配。如果方法名称的开头不匹配任何动词,则 webapi 默认为 HttpPost。因此,您可以通过重命名控制器方法来避免放置 [HttpPost] 属性。

参见:Is there a default verb applied to a Web API ApiController method?