Asp.net 为什么MVC4 APIController';是否仅根据参数的类型和数量调用方法?

Asp.net 为什么MVC4 APIController';是否仅根据参数的类型和数量调用方法?,asp.net,asp.net-mvc-4,asp.net-web-api,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我是MVC新手,我想我的困惑有点超出了这个问题的标题,但首先: public class TestController : ApiController { [HttpPost] public bool ReceiveHunk(Alterity.Models.Async.HunkDTO hunk) { return true; } [HttpPost] public bool A(int x) { return false; }

我是MVC新手,我想我的困惑有点超出了这个问题的标题,但首先:

public class TestController : ApiController
{
    [HttpPost]
    public bool ReceiveHunk(Alterity.Models.Async.HunkDTO hunk)
    {
        return true;
    }

    [HttpPost]
    public bool A(int x) { return false; }
    [HttpPost]
    public bool B(int x) { return true; }
}
我不能选择A或B,因为URL似乎只路由到控制器(这是正确的术语吗?),方法是根据参数选择的。因为我在两个方法上有一个(intx),所以它不知道调用哪个。当我这样做时,我的困惑更加严重:

$.ajax({
    cache: false,
    type: "POST",
    url: ApiLocation + 'Test',
    contentType: 'application/json',
    dataType: "json",
    data: JSON.stringify(5),
    success: function (response) { }
});

它仍然转到ReceiveHunk方法,hunk为null。如果我把B注释掉,ReceiveHunk仍然被调用。这与我使用JSON而不是表单url编码有关吗?对于每个具有相同签名的方法,我是否必须有一个单独的ApiController?有没有办法将路由(或whatsit)配置为URL包含方法名?常规控制器在URL中包含方法名,为什么ApiController不包含?此外,如果我更改A或B take zero参数,我只会得到一个内部服务器错误(500),没有调用任何方法,也没有异常。任何有助于澄清此问题的信息都将不胜感激。

这只是ASP.NET Web API的默认路由约定,有关如何配置ASP.NET Web API路由(以及路由中的操作名称)的更多详细信息,请阅读以下问题/答案: