WebAPI 2.使用相同的控制器方法响应所有HTTP谓词

时间:2015-07-20 18:54:17

标签: c# asp.net-web-api2

我想用相同的控制器方法响应所有Http动词。我找到的唯一方法是通过装饰方法将所有的http方法attriubutes。在我看来,应该有一个更好的方法。是否有一个单一的装饰会更好,或者单个路线定义可能?

[HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPost, HttpPatch, HttpPut]

2 个答案:

答案 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.

相关问题