Web api 2相同的方法名称和相同的参数名称

时间:2017-04-21 06:52:17

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

我的api控制器中有两个方法,它们具有相同的名称和相同数量的参数,但其中一个参数的类型不同。你可以在这里看到

[HttpGet]
public dynamic Add(String organizationId, Driving driving)

[HttpGet]
public dynamic Add(String organizationId, bool driving)

我试图像这样打电话给api

var data {organizationId: "something", driving: true };

var ajaxConfig = {
        url: some url,
        type: "GET",
        dataType: 'json',
        crossDomain: true,
        success: function (data) {
            onDone();
            callback(data);
        },
        error: function (error, textStatus, errorThrown) {
        }

      };
        ajaxConfig.data = data;

    $.ajax(ajaxConfig);

系统在调用哪个API之间感到困惑。我做错了吗?还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用attribute routing使方法指向控制器中的不同路径

[HttpGet]
[Route("api/controller/add1")] // Url http://url.domain.com/api/controller/add1
public dynamic Add(String organizationId, Driving driving)

[HttpGet]
[Route("api/controller/add2")] // Url http://url.domain.com/api/controller/add2
public dynamic Add(String organizationId, bool driving)

答案 1 :(得分:1)

控制器只能以两种方式区分两个名称相同的方法:

  • 通过HttpVerb属性:在这种情况下,您可以将[HttpGet]应用于第一个方法,将[HttpPost]应用于第二个方法。从客户端调用时,必须在使用第一个时使用Get方法,在使用第二个时使用Post方法。
  • 通过Route属性:在这种情况下,你告诉MVC每个方法要采取什么路由(例如:[Route(" api / mycontroller / AddWithBoolean")])。在这种情况下,客户端使用正确的路由选择正确的方法。

如果您不想在客户端中进行区分,并且您希望服务器进行区分,则需要采用其他方法。

您可以创建一个这样的方法:

[HttpGet]
public dynamic Add(String organizationId, object driving)
{
     if (driving is Driving)
          // execute code
     else
          // execute other code
}

这个例子远未完成,但它可能是一种方法。

关于, 约翰