0

我创建了两条路线

        config.Routes.MapHttpRoute(
            "1", "int/{controller}/{Id}",
            new { action = "GetById" });

        config.Routes.MapHttpRoute(
            "The rest", "int/{controller}/{action}",
            defaults: new { action = "Get" });

认为我可以创建一个控制器

    [HttpGet]
    public string Text(string text = null)
    {
    }

并用 调用它/int/sandpit2/text?text=xxx,但我得到 404 并显示“在控制器 'Sandpit2' 上找不到与名称 'GetById' 匹配的操作。”

我可以以某种方式调用第一条规则GetById,但是如果没有GetById方法,是否有其他路由尝试匹配而不是获取404s

4

1 回答 1

0

您的问题是路由发生在 3 个不同的阶段:

  • 寻找匹配的路线
  • 根据路由找到匹配的控制器
  • 在匹配的控制器中查找匹配的动作

因此,在您的情况下,第一个路由符合 URL 并到达您的控制器。然后它找不到匹配的参数,Id所以说找不到匹配的动作。如果您将其更改为此应该可以:

[HttpGet]
public string Text(string id = null)
{
   ...
}
于 2013-09-03T10:14:56.420 回答