Хорошие URL на основе нескольких параметров
Совершенно ясно, каковы преимущества использования хороших URL на вашем веб-сайте.
Позвольте мне уточнить, что я спрашиваю, используя пример. Отметим, что сущности здесь не могут быть однозначно идентифицированы по имени.
Скажем, пользователь хочет видеть все радиостанции, зарегистрированные на вашем сайте, которые доступны в определенном месте. Это делается путем доступа к URL: http://example.com/radios/1234/radio-paris-eiffel-tower
- 1234 - в данном случае это уникальный идентификатор местоположения
- radio-paris-eiffel-tower - это просто дополнительная информация, чтобы сделать URL лучше.
Если пользователи хотят видеть все места, где доступна определенная радиостанция, они могут использовать: http://example.com/locations/abcd/radio-xyz
- abcd - здесь идентифицирует радио
Теперь вопрос: что будет хорошим URL для доступа к деталям радиостанции определенной радиостанции в определенном месте (например, имя, частота,...)?
http://example.com/radio/1234/radio-paris-eiffel-tower/abcd/radio-xyz или http://example.com/radio/details?radioid=1234&locationid=abcd/radio-xyz-at-paris-eiffel-tower
Есть ли у вас какие-либо предложения, и не могли бы вы дать мне пример того, как кодировать маршрут для предложенного URL-адреса?
Большое спасибо.
PS: на самом деле думать о URL выше, а не http://example.com/radios/1234/radio-paris-eiffel-tower
лучше было бы http://example.com/1234/radio-paris-eiffel-tower/radios/
wdyt?
Как я могу сопоставить такой маршрут к RadiosController.ListByLocation(int locationId)?
1 ответ
Вот предложение с использованием пользовательского маршрута. Я установил это в файле Global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Radio and Frequency Route", // Route name
"radio/details/{radioId}/{locationId}/{someUnusedName}", // URL with parameters
new
{
controller = "Some",
action = "SomeAction",
radioId = string.Empty,
locationId = string.Empty
}
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Контроллер довольно прост:
public class SomeController : Controller
{
public ActionResult SomeAction(string radioId, string locationId)
{
ViewData["radioId"] = radioId;
ViewData["locationId"] = locationId;
return View();
}
}
и он отвечает на URL с префиксом /radio/details:
http://localhost:51149/radio/details/123/456/moo
http://localhost:51149/radio/details/abc/xyz/foo
Теперь вы можете создать любой дружественный URL, который соответствует вашим потребностям. Возможно, вы хотите изменить префикс / radio / details на что-то другое?