为什么HttpGet只需要一些动作?

Use*_*999 6 c# asp.net-web-api

让我先描述一下情况:

我有一个基本的控制器,看起来像这样:

public class SearchRequestController : ApiController
{
    public IEnumerable<ObjectA> GetAllRequests() {...}
    {}
    public IEnumerable<ObjectA> GetLatestRequest() {...}
    {}
}
Run Code Online (Sandbox Code Playgroud)

使用以下路由

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
Run Code Online (Sandbox Code Playgroud)

我可以轻松地使用如下功能

 Http://myServer/myvirtualdirectory/api/SearchRequest/GetAllRequests
 Http://myServer/myvirtualdirectory/api/SearchRequest/GetLatestRequest
Run Code Online (Sandbox Code Playgroud)

现在我想添加以下控制器

 public class UserController : ApiController
 {
    public IEnumerable<UserObject> SearchUsersByInput() {...}
 }
Run Code Online (Sandbox Code Playgroud)

但是以下GET不起作用

 Http://myServer/myvirtualdirectory/api/User/SearchUsersByInput

 I'm getting a 405: {"Message":"The requested resource does not support http method 'GET'."} 
Run Code Online (Sandbox Code Playgroud)

但是当我改变我的功能时,它可以工作如下:

 public class UserController : ApiController
 {
  [HttpGet]
  public IEnumerable<UserObject> SearchUsersByInput() {...}
 }
Run Code Online (Sandbox Code Playgroud)

问题: 有人可以解释这种行为的起源吗?我做错了什么或者我的路由有问题吗?

czu*_*ski 6

请参考这里的帖子

您将看到可以使用命名约定(这就是使用名称中的Get的方法工作的原因),或者您可以通过使用正确的HTTP属性修饰操作来显式指定操作的HTTP方法.