【问题标题】:How does the api controller know which method to call without the annotation没有注解,api控制器怎么知道调用哪个方法
【发布时间】:2018-04-07 18:47:55
【问题描述】:

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

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

  • [HttpGet]
  • [HttpPost]
  • [HttpPut]
  • [HttpDelete]

相反,它们上面都有这个:

[ResponseType(typeof(ModelName))]

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

  • GetModelName()
  • PostModelName()
  • PutModelName()
  • 删除模型名称()

所以,例如,当我将方法类型放入我的 ajax 调用中以“删除”时.. 是否通过包含“删除”一词的方法名称进行某种名称识别?如果没有,没有上面的属性,api控制器怎么知道调用哪个方法?

【问题讨论】:

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


    【解决方案1】:

    来自documentation

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

    所以基本上是基于约定的。

    【讨论】:

      【解决方案2】:

      我需要澄清答案,因为可以使用基于注释的方法声明! “为什么 [HttpGet]/[ActionName]/[Route] 在 ApiController 上不起作用”最常见的错误是命名空间 using System.Web.Http;using System.Web.Mvc;。很棘手!!!

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

      所以请确保您在 ApiController 中使用 using System.Web.Http;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2019-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-08
        相关资源
        最近更新 更多