Пользовательская маршрутизация с помощью веб-API ASP.NET
Предположим, что у меня есть вложенная в базу данных иерархии многих типов:
В одном регионе имеется много стран; каждая страна имеет много городов; a Город должен принадлежать одной и только одной стране.
Тезисы этой информации в СУРБД - это тривиальное упражнение, но (на мой взгляд) наиболее разумная конечная точка REST для возврата списка стран для данного идентификатора области будет выглядеть примерно так:
HTTP GET http://localhost/Region/3/Countries
По умолчанию маршрутизация .NET Web API будет, в лучшем случае, http://localhost/Countries/Region/3
или http://localhost/Region/Countries/3
.
Есть ли разумное соглашение об именах, за которым я должен следовать, или настраиваемая маршрутизация достаточно, чтобы позволить URI принимать любую форму, которая мне нравится?
Ответы
Ответ 1
Маршрутизация должна быть настраиваемой, чтобы получить URL-адреса, которые вы ищете. Предполагая, что вам нужны URL-адреса в форме "http://localhost/Region/3/Countries", вы можете зарегистрировать этот настраиваемый маршрут:
config.Routes.MapHttpRoute("MyRoute", "Region/{regionId}/Countries", new { controller = "Region", action = "GetCountries" });
Это будет отправлять запросы в действие "GetCountries" в классе "RegionController". У вас может быть параметр regionId для действия, которое автоматически привязывает модель к вам из URI.
Возможно, вам захочется посмотреть в Интернете пакет маршрутизации атрибутов для WebAPI, поскольку он может быть более уместным в вашем случае.
Ответ 2
Маршруты должны быть достаточно гибкими - вопрос заключается в том, как вы хотите обслуживать данные. У вас есть один контроллер в виду или несколько?
Если у вас был RegionController, я не понимаю, почему вы не можете настроить маршрут:
routes.MapHttpRoute(
name: "CountryList",
routeTemplate: "{controller}/{regionId}/countries"
);
И соответствующий метод:
public CountryCollection Get(int regionId)
Или мне что-то не хватает в вашем вопросе? Откуда берется ваша маршрутизация по умолчанию?
Посмотрите их документацию:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api