【问题标题】:Defaults in http routeshttp 路由中的默认值
【发布时间】:2013-09-06 08:46:30
【问题描述】:

我创建了两条路线

        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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2020-05-17
      • 1970-01-01
      • 2017-01-15
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多