объектно-ориентированная схема URL в asp.net MVC 2 - PullRequest
0 голосов
/ 25 ноября 2010

Я хочу изменить стандартные маршруты URL ASP.NET MVC

http://example.com/Controller/Action[/Id]

что-то вроде:

http://example.com/Controller/Id/Action

Изменение схемы маршрута тривиально, но у меня возникают проблемы при обработке значений по умолчанию. Мне нужны эти URL

http://example.com/Controller/ -> Maps to Index() -> List of items
http://example.com/Controller/Create
http://example.com/Controller/Id[/Details] -> Maps to Details(id)
http://example.com/Controller/Id/Edit -> Maps to Edit(id)
http://example.com/Controller/Id/Delete -> Maps to Delete(id)

Хлоп! Это означает довольно много маршрутов вместо хорошего по умолчанию. Или я могу использовать параметры URL со значениями по умолчанию в середине URL?

Следующим шагом является использование дружественной (но уникальной!) Ссылки на объект (например, имя клиента. Предположим, она уникальна) вместо идентификатора записи в БД (id). Такие как:

http://example.com/Controller/Name[/Details] -> Maps to Details(id)

Пока все хорошо, но я не уверен, что это хорошая идея использовать это для страницы редактирования (и, возможно, удаления): форма редактирования позволяет пользователю изменять имя объекта, что приводит к возможным несоответствиям в URL. Должен ли я придерживаться идентификатора в редактировании URL-адресов?

Кто-нибудь сталкивался с такими URL? Вы выдвинули идею в иерархические системы? Это все хорошая идея, или я погружусь в большее количество неприятностей, чем выгод?

TIA для ваших мыслей.

Ответы [ 2 ]

2 голосов
/ 25 ноября 2010

Вы можете сделать это, только если параметр ID всегда присутствует в URL. По очевидным причинам необязательный параметр может быть только в конце URL-адреса, или невозможно устранить его неоднозначность.

0 голосов
/ 25 ноября 2010

Попробуйте это:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{id}/{action}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Контроллер по умолчанию идет домой и запускает действие Index, не упомянутое другим способом.Идентификатор также является необязательным.Все, что я на самом деле изменил, был порядок параметров.

Что касается остальной части вопроса.Если ваши пользователи вошли в систему и, например, редактируют свой профиль, вы можете получить идентификатор того, что нужно редактировать, где-то еще - например, файл cookie.Я делаю это в своем управлении пользователями.URL / Пользователь / Правка уникален для пользователя, вошедшего в систему.

...