Вопрос

Существует ли определенный шаблон, которому обычно следуют разработчики?Раньше я никогда особо не задумывался об этом в своих веб-приложениях, но механизм маршрутизации ASP.NET MVC в значительной степени заставляет вас, по крайней мере, принять это во внимание.

До сих пор мне нравилась структура контроллер/действие/индекс (например.Products/Edit/1), но я борюсь с более сложными URL-адресами.

Например, предположим, что у вас есть страница, на которой перечислены все продукты, которые пользователь имеет в своей учетной записи.Как бы вы это сделали?На ум я могу придумать следующие возможности для страницы со списком и страницы редактирования:

  1. Пользователь/{идентификатор пользователя}/Продукты/Список, Пользователь/{идентификатор пользователя}/Продукты/Изменить/{идентификатор продукта}
  2. Пользователь/{идентификатор пользователя}/Продукты, Пользователь/{идентификатор пользователя}/Продукты/{идентификатор продукта}
  3. Продукты?UserID={идентификатор пользователя}, Продукты/Изменить/{идентификатор продукта}

Я уверен, что есть много других, которых мне не хватает.Любой совет?

Это было полезно?

Решение

Мне нравятся RESTful, удобные для пользователя и взломанные URL-адреса.

Что это значит?Давайте начнем с удобные URL-адреса.Для меня удобный URL-адрес — это что-то, что легко набрать и легко запомнить. /Default.aspx?action=show&userID=140 не соответствует ни одному из этих требований.Однако URL-адрес типа «/users/troethom» кажется логичным.

Это приводит к следующему пункту.А взломанный URL — это URL-адрес, который пользователь может изменить и при этом получить результат.Если URL-адрес можно взломать, а URL-адрес моего профиля /users/troethom было бы безопасно удалить мое имя пользователя, чтобы получить список пользователей (/users).

С использованием RESTful URL-адреса очень похоже на идеи, лежащие в основе других моих предложений.Вы разрабатываете URL-адреса для пользователя, а не для компьютера, и поэтому URL-адрес должен относиться к контенту, а не к технической части вашего сайта.URL-адрес «/users» имеет больше смысла, чем «/users/list», а URL-адрес «/category/programming/javascript» (представление подкатегории «javascript» в категории «программирование» лучше, чем «/category/show»). /12´.

Действительно, отказаться от идентификаторов сложнее, но в моем мире это того стоит.

Также проконсультируйтесь раздел «Понимание URI» об общих проблемах реализации HTTP W3C.В нем есть список распространенных ошибок при разработке URI.Еще один хороший ресурс Находчивые и взломанные поисковые URL-адреса.

Другие советы

Возможно, вы захотите взглянуть на вопрос "Дружественная схема URL-адресов?".

Особенно, Ответ Ларри Смитмира предоставил список распространенных схем URL-адресов при использовании MVC в ASP.NET.

Кроме того, вы можете рассмотреть возможность использования разных глаголов для повторного использования одних и тех же маршрутов для разных действий.Например, запрос GET к «Products/Edit/45» отобразит редактор продукта, тогда как POST к тому же URL-адресу обновит продукт.Для этого вы можете использовать атрибут AcceptVerb:

[AcceptVerb("GET")]
public ActionResult Edit(int id)
{
    ViewData["Product"] = _products.Get(id);
    return View();
}

[AcceptVerb("POST")]
public ActionResult Edit(int id, string title, string description)
{
    _products.Update(id, title, description);
    TempData["Message"] = "Changes saved successfully!";

    return RedirectToAction("Edit", new { id });
}

Билл де Хора написал очень хорошее эссе под названием Критерии сопоставления веб-ресурсов для фреймворков это стоит прочитать.

Чтобы добавить к комментариям Троетома, RESTful обычно также означает, что, например, для создания нового пользователя вы должны ПОМЕЩИТЬ представление в /users/newusername

RESTful в основном использует 5 стандартных методов HTTP (GET, PUT, POST, DELETE, HEAD) для управления контентом и доступа к нему.

Хорошо, это непросто для веб-браузера, но вы всегда можете использовать перегруженный POST (отправить сообщение в /users/username с представлением пользователя, чтобы изменить некоторые детали и т. д.).

Это хороший способ сделать что-то, я бы рекомендовал прочитать RESTFul веб-сервисы чтобы лучше понять :D (и это чертовски хорошая книга!)

Я видел два основных общепринятых подхода к этой теме...

Один из них описан в Документация проекта MvcContrib

а другой описан в сообщение в блоге Стивена Вальтера (что лично я предпочитаю).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top