带有可选查询字符串的MapHTTPRouting

时间:2018-06-28 12:02:25

标签: c# routing asp.net-web-api2 url-routing

我使用示例网址设置了以下路由:

// /v1/account/getAccount/24/transaction
config.Routes.MapHttpRoute(
    name: "FunctionAPI",
    routeTemplate: "v1/{controller}/{task}/{key}/{function}",
    defaults: new { }
);

// /v1/account/getAccount/24
config.Routes.MapHttpRoute(
    name: "KeyAPI",
    routeTemplate: "v1/{controller}/{task}/{key}",
    defaults: new { }
);

// /v1/account/getAccount
config.Routes.MapHttpRoute(
   name: "TaskAPI",
   routeTemplate: "v1/{controller}/{task}",
   defaults: new {  }
);

这些示例网址中的每个网址上都可以包含可选的查询字符串。例如/ v1 / account / getAccount / 24?filters = hello

具有以下类别:

[HttpGet]
public JArray GetAccount()
{
    Console.WriteLine("Get Account");
}

[HttpGet]
public JArray GetAccount(string task, int key, string filters)
{
    Console.WriteLine("Get Account with optional filters");
}

[HttpGet]
public JArray GetAccount(string task, int key, string function, string filters)
{
    Console.WriteLine("Get Account with function and / or optional filters");
}

但是,如果我包括querystring,这似乎只属于正确的类。在大多数情况下,当不包括查询字符串时,它属于GetAccount()。

/ v1 /帐户/ getAccount / 24 /交易= GetAccount / v1 / account / getAccount / 24 / transaction?filters = hello =使用功能和/或可选过滤器获取帐户 / v1 / account / getAccount / 24?filters = hello =使用可选过滤器获取帐户 / v1 / account / getAccount / 24 =获取帐户

如何更新这些路由以使其能够与可选查询字符串一起使用? 字符串已经可以为空。我无法创建用于处理所有情况的函数,因为/ v1 / account / getAccount / 24 / transaction vs / v1 / account / getAccount / 24?filters = hello存在问题,因为它们都是字符串,整数,字符串。

谢谢!

0 个答案:

没有答案