Хорошие 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 на что-то другое?

Другие вопросы по тегам