【问题标题】:Same Method name on Web API controllerWeb API 控制器上的相同方法名称
【发布时间】:2016-01-22 20:17:47
【问题描述】:

在 WEB API 控制器中,我们能否拥有相同的方法名称和不同的 HTTP 动词,如 HTTPGET/HTTPPOST 等。如果是,请详细说明 RouteConfig 中需要哪些配置。 (我有一个角度前端应用程序试图调用这些方法)

这是一个例子。

 [HttpGet]
        public string Test()
        {
            return "Success";
        }


 [HttpPost]
        public string Test()
        {
            return "Success";
        }

这是我的路由配置

config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");

【问题讨论】:

  • 查看Route属性。

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


【解决方案1】:

在一个 WEB API 控制器中,我们可以有相同的方法名 不同的 HTTP 动词,如 HTTPGET/HTTPPOST 等

我想换个说法:

我可以向同一个 URL 发出 GET 和 POST 请求并已处理 适当的。

是的。您可以使用Route 属性为这两种api 控制器方法处理相同的Url,一个用于GET,另一个用于POST,用HttpGetHttpPost 属性适当地装饰。

[HttpGet]
[Route("api/mymethod")]
public string SomeMethod()
{
    return "from somemethod - get";
}
[HttpPost]
[Route("api/mymethod")]
public string SomeAnotherMethod()
{
    return "from some another method - post";
}

【讨论】:

    【解决方案2】:

    您可以添加两个具有不同参数的方法。

        [HttpPost]
     public string Test(string data)
     {
          return "Success";
     }
    
    [HttpGet]
     public string Test()
     {
          return "Success";
     }
    

    希望这就是你要找的。​​p>

    【讨论】:

      【解决方案3】:

      您不能在同一个类中定义具有相同签名的方法。编译器不会让你这样做! 但是你为什么需要这个?如果操作是 POST,那么您必须有某种方法来获取浏览器/客户端正在发布的数据。

       [HttpPost]
       public string Test(string data)
       {
            return "Success";
       }
      

      如果没有要发布的数据,那么只需简单地获取另一个方法。

      【讨论】:

      • 感谢您的回复。是的,你是对的,可以说我们有不同参数的 post 方法..我们可以在 API 中使用它吗?获取没有任何输入参数的方法和带有输入参数和方法名称的 Post 是否相同?
      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2020-09-19
      • 2021-11-17
      • 1970-01-01
      • 2015-06-20
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多