【问题标题】:Why are an MVC4 ApiControllers' methods called only based on the type and number of parameters?为什么仅根据参数的类型和数量调用 MVC 4 ApiController 的方法?
【发布时间】:2012-08-27 02:21:02
【问题描述】:

我是 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 仅路由到控制器(这是正确的术语吗?),并且方法是根据参数选择的。由于我在两个方法上有一个 (int x),它不知道该调用哪个。当我这样做时,这一事实加剧了我的困惑:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2013-02-26
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      相关资源
      最近更新 更多