Asp.net web api http路由中的默认值

Asp.net web api http路由中的默认值,asp.net-web-api,asp.net-web-api-routing,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 { acti

我创建了两条路线

        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

您的问题是路由发生在3个单独的阶段:

  • 寻找匹配的路线
  • 基于路由查找匹配的控制器
  • 在匹配的控制器中查找匹配操作
因此,在您的情况下,第一条路由符合URL的条件并到达您的控制器。然后它找不到
Id
的匹配参数,所以说找不到匹配操作。如果您将其更改为,则此选项应起作用:

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