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

本文关键字:响应 方法 动词 HTTP 控制器 WebAPI | 更新日期: 2023-09-27 18:03:33

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

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

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

您可以使用AcceptVerbs属性像这样装饰您的控制器方法。

[AcceptVerbs("PATCH", "GET", "DELETE")]

我认为你可以实现你的目标配置你的路由如下面的例子:

routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "all", id = RouteParameter.Optional }

);

注意all方法将总是在你的控制器内部被调用。

此外,根据您的需要,可能有更好的方法,例如,如果您只有一个控制器作为唯一的入口点,或者您可以在url中使用特殊输入。请注意,您将不得不处理post并在控制器方法中获取数据,这可能不是理想的,正如我所说的,这将取决于您的规格。

有其他的方法来处理路由或控制器和方法选择可以帮助你,你可以实现你自己的IHttpControllerSelector。SelectController处理控制器选择或IHttpActionSelector。SelectAction处理方法选择,请查看Web Api 2文档