http路由中的默认值

时间:2013-09-03 07:47:08

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

我创建了两条路线

        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

1 个答案:

答案 0 :(得分:0)

您的问题是路由分三个阶段发生:

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

因此,在您的情况下,第一条路线有资格获得URL并进入您的控制器。然后它找不到Id的匹配参数,因此说无法找到匹配的操作。如果你改变它应该工作:

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