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?
使用动作名称路由,例如:
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?