Хорошие URL на основе нескольких параметров - PullRequest
3 голосов
/ 07 июля 2010

Совершенно ясно, каковы преимущества использования хороших 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 Ответ

3 голосов
/ 07 июля 2010

Вот предложение с использованием пользовательского маршрута. Я настроил это в файле 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 на что-то другое?

...