Подтвердить что ты не робот

Пользовательская маршрутизация с помощью веб-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 принимать любую форму, которая мне нравится?

4b9b3361

Ответ 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