Web Api 使用 uri 参数和查询字符串时的路由问题

Web Api routing issue when using uri parameter and query string

我正在努力让一些 Web Api 2.2 路由正常工作。我有一条路线:

config.Routes.MapHttpRoute(
            name: "OrgAdminGetOrgUsers",
            routeTemplate: "organisations/{id}/users",
            defaults: new { controller = "OrganisationDetails", action = "GetUsersInAnOrganisation" }                
        );

我遇到的问题是,当我添加查询字符串以使 GET 可搜索时,我的路由停止工作并收到 404。我到处寻找同时使用 Uri 参数和查询字符串的示例,但我找不到任何东西。似乎人们会做很多事情?当我从控制器中删除查询字符串和可选参数时,路由工作正常。

URI:

organisations/3/users?orderby=asc&orderByColumn=surname&start=1&end=15 

控制器:

[HttpGet]
    public IEnumerable<User> GetUsersInAnOrganisation(int id, string email = "", string firstName = "", string surname = "", string orderByColumn = "", string orderBy = "asc", int start = -1, int end = -1)

非常感谢您的帮助!

这对我有用 -

配置 -

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
            "Default", 
            "api/{controller}/{action}/{id}", 
            defaults: new { id = RouteParameter.Optional });

带有查询参数的 url -

http://localhost:57597/api/OrganisationDetails/GetUsersInAnOrganisation/3?
orderby=asc&orderByColumn=surname&start=1&end=15

希望这对您有所帮助。

所以我设法让它工作了,控制器需要用 [FromUri] 作为 id 参数来声明:

[HttpGet]
public IEnumerable<User> GetUsersInAnOrganisation([FromUri] int id, string email = "", string firstName = "", string surname = "", string orderByColumn = "", string orderBy = "asc", int start = -1, int end = -1)