【问题标题】:Custom template route is not working for Get methods without Ids. Web API自定义模板路由不适用于没有 ID 的 Get 方法。网络 API
【发布时间】:2014-01-17 12:21:10
【问题描述】:

对 testdata 控制器的 API 调用仅适用于带有 Id 的 REST 调用。 我有一个自定义路由显示如下,每次我调用http://localhost:56762/api/web/testdata/ 时都没有任何反应(我在IEnumerable<TestData> Get() 上设置了一个断点,它没有被调用)。但是,如果我调用 http://localhost:56762/api/web/testdata/1,我的 get 方法的 ID 工作正常。

config.Routes.MapHttpRoute(
name: "TestData",
routeTemplate: "api/web/testdata/{id}",
defaults: new {controller="testdata", id = RouteParameter.Optional }
);

// GET api/web/testdata/5
public string Get(int id)
{
return "TEST DATA!";
}

public IEnumerable<TestData>  Get()
{
   ...

  return listTestData;
}

【问题讨论】:

    标签: c# asp.net asp.net-web-api routes


    【解决方案1】:

    routeTemplate 中的testdata 需要一个括号,见下文:

        config.Routes.MapHttpRoute(
            name: "TestData",
            routeTemplate: "api/web/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional }
            );
    

    更新

    如果你想为你的路由指定一个特定的控制器,见下文:

            config.Routes.MapHttpRoute(
                name: "TestData",
                routeTemplate: "api/web/{controller}/{id}",
                defaults: new { controller = "testdata", id = RouteParameter.Optional }
                );
    

    注意:需要在Register方法中删除或注释掉Default Api路由。

    【讨论】:

    • 谢谢林。我添加了括号,但它不起作用。
    • 谢谢你这可以工作,但这不是我想要的。我希望能够为特定路由指定特定控制器。
    • 谢谢林,但仍然使用 {controller} 它不起作用:(它只有在我添加 id 时才起作用。
    • 嗨@Devsined,我想问题是你在Register方法中留下了Default Api路由,你应该删除它并使用我更新的部分答案。
    • 谢谢。你说得对,我删除了 Default Api 路由,它工作正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2021-08-18
    相关资源
    最近更新 更多