如果没有注释,api控制器如何知道调用哪个方法

时间:2017-05-09 17:32:27

标签: c# asp.net-mvc asp.net-web-api

我最近刚开始使用asp.net web api控制器。

我通过ajax调用这些控制器方法,但默认情况下,当我使用EF创建web api控制器时,没有一个控制器方法具有上面的属性,如:

  • [HttpPost]
  • [HttpPut]
  • [HttpDelete]
  • [ResponseType(typeof(ModelName))]

相反,他们都在他们之上:

Model.where(email: 'example@domain.com').last

但是,控制器方法名称确实在方法名称中包含了这些注释,如:

  • GetModelName()
  • PostModelName()
  • PutModelName()
  • DeleteModelName()

所以,当我把方法类型放在我的ajax调用中,例如'删除'时,是否有某种名称识别通过方法名称中包含“删除”一词?如果没有,api控制器如何知道在没有上面的属性的情况下调用哪种方法?

3 个答案:

答案 0 :(得分:4)

来自documentation

  

要查找操作,Web API会查看HTTP方法,然后查找名称以该HTTP方法名称开头的操作

基本上是基于惯例的。

答案 1 :(得分:2)

是。来自Microsoft documentation

  

要查找操作,Web API会查看HTTP方法,然后查看   对于名称以该HTTP方法名称开头的操作。对于   例如,通过GET请求,Web API会查找启动的操作   使用“Get ...”,例如“GetContact”或“GetAllContacts”。这个   约定仅适用于GET,POST,PUT和DELETE方法。您可以   通过使用控制器上的属性启用其他HTTP方法。

答案 2 :(得分:0)

我需要澄清答案,因为基于注释的方法声明可用! 最常见的错误是"为什么from PIL import ImageGrab ImageGrab.grab().save("screen_capture.jpg", "JPEG") 不适用于ApiController"是名称空间[HttpGet]/[ActionName]/[Route] vs using System.Web.Http;。非常棘手!!!

如果您在ApiController using System.Web.Mvc;中找到,那么using System.Web.Mvc;将是MVC版本,不会在[HttpGet]/[ActionName]/[Route]中注册。

因此,请确保您在ApiController

中使用WebApiConfig.cs