У меня есть контроллер учетной записи с двумя методами Get, один из которых получает все учетные записи и не принимает никаких входных данных, а другой принимает Id int и возвращает эту конкретную учетную запись.
Ограничения проекта заключаются в том, что у нас не может быть id в качестве необязательного параметра на маршруте по умолчанию, вместо этого нам нужен доступ к get-one-account и get-all-accounts через разные маршруты, и мы не можем использовать маршрутизацию атрибутов. Итак, наша конфигурация маршрута в настоящее время выглядит так:
config.Routes.MapHttpRoute("AccountWithId", "api/account/{id}", new { action = "Get", id = RouteParameter.Optional }
, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), id = @"\d+" });
config.Routes.MapHttpRoute("Default", "api/{controller}");
Мои два метода Get в AccountController выглядят следующим образом:
public IHttpActionResult Get()
{
IList<AccountDto> users = m_service.Get();
return Ok(users);
}
public IHttpActionResult Get(int accountId)
{
AccountDto user = m_service.Get(accountId);
return Ok(user);
}
Но когда я вызываю Get с параметром id в своем тесте через свой собственный маршрут и отлаживаю, как показано ниже, он по-прежнему использует метод Get, который не принимает параметр id и возвращает все.
var url = "http://test/api/account/" + accountId;
var response = await m_server.HttpClient.GetAsync(url);
Есть идеи, почему?