c# - 为什么仅某些操作需要 HttpGet?

标签 c# asp.net-web-api

让我先概括一下情况:

我有一个基本的 Controller ,如下所示:

public class SearchRequestController : ApiController
{
    public IEnumerable<ObjectA> GetAllRequests() {...}
    {}
    public IEnumerable<ObjectA> GetLatestRequest() {...}
    {}
}

使用下面的路由

    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 }
        );
    }

我可以很容易地使用下面的功能

 Http://myServer/myvirtualdirectory/api/SearchRequest/GetAllRequests
 Http://myServer/myvirtualdirectory/api/SearchRequest/GetLatestRequest

现在我想添加以下 Controller

 public class UserController : ApiController
 {
    public IEnumerable<UserObject> SearchUsersByInput() {...}
 }

但是下面的GET不行

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

 I'm getting a 405: {"Message":"The requested resource does not support http method 'GET'."} 

但是,当我按如下方式更改我的功能时,它会起作用:

 public class UserController : ApiController
 {
  [HttpGet]
  public IEnumerable<UserObject> SearchUsersByInput() {...}
 }

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

最佳答案

请引用帖子here

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

关于c# - 为什么仅某些操作需要 HttpGet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068868/

相关文章:

具有可触发初始化的 C# 单例模式

c# - 如何在 View 中渲染图像。图像的值 = byte[]。网络MVC

c# - 是否有可能获得网站的 swagger 文档的离线版本?

asp.net - 在 ASP.NET Core API 中以字符串形式接收 JSON 对象

c# - Entity Framework : more than one entity have the same primary key value

c# - WCF 启用 Ajax-如何增加一个 [OperationContract] 的数据长度大小

c# - 如何在 C# 中减去 dateTimePicker 字段

c# - 按 T​​ab 键不会选择下一个控件

javascript - 通过电子邮件而不是 ID 搜索

sql-server - 是否可以创建 Entity Framework 上下文实例的副本来进行并行查询