我想用相同的控制器方法响应所有Http动词。我找到的唯一方法是通过装饰方法将所有的http方法attriubutes。在我看来,应该有一个更好的方法。是否有一个单一的装饰会更好,或者单个路线定义可能?
[HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPost, HttpPatch, HttpPut]
答案 0 :(得分:2)
您可以使用AcceptVerbs属性来装饰您的控制器方法,如此..
[AcceptVerbs("PATCH", "GET", "DELETE")]
答案 1 :(得分:2)
我认为您可以实现目标,将您的路由配置为以下示例:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "all", id = RouteParameter.Optional }
);
请注意, all 方法将始终在控制器内调用。
此外,根据您的需要,可能有更好的方法,例如,如果您只有一个控制器是唯一的入口点,或者您的网址中可能有特殊输入。请注意,您必须处理帖子并获取控制器方法中的数据,这可能并不理想,因为我说它将取决于您的规格。
还有其他方法可以帮助您处理路由或控制器和方法选择,您可以实现自己的 IHttpControllerSelector.SelectController 来处理控制器选择或 IHttpActionSelector.SelectAction 要处理方法选择,请查看Web Api 2 Documentation.