Обработка сложных URL в ASP MVC - PullRequest
1 голос
/ 06 мая 2009

У меня есть - я думаю - сложный URL для работы в ASP MVC 1.0: Для всех моих действий в большинстве контроллеров все время требуются два параметра: учетная запись и проект. Это поверх требований каждого Акции. Это означает, что типичный URL выглядит следующим образом:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

В этом примере: myaccount - это имя учетной записи. проектов могут быть контроллерами, другие варианты, такие как местоположения , сотрудников . project_id - это идентификатор проекта в myaccount , сайтов может быть контроллером, другие варианты, такие как персонал или платежей . edit - это действие, а 12 - идентификатор редактируемого сайта. (надеюсь, это достаточно ясно)

Теперь один из вариантов - создать маршрут и передать project_id и account во все действия контроллеров, добавив два дополнительных параметра ко всем действиям. Это не очень желательно, и я также не уверен, что два контроллера (проекты и сайты) будут работать здесь.

Моя идеальная ситуация - использовать какой-то контекст, который путешествует с вызовом действия контроллера и хранить там project_id и myaccount. Остальные параметры могут быть обработаны обычным образом, например:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

Есть идеи, как и где это может произойти? Кроме того, как это будет работать с ActionLink (т.е. генерировать правильные ссылки на основе этого контекста)?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 мая 2009

Сначала вам нужно добавить токены к вашим маршрутам, например {company}/projects/{project}{controller}/{action}/{id}. Затем, если вы написали свой собственный IControllerFactory, тогда было бы очень легко вставить значения из RouteData в контроллер через конструктор или как вы хотели это сделать. Вероятно, самый простой способ начать работу - это создать подкласс DefaultControllerFactory и переопределить метод CreateController.

0 голосов
/ 06 мая 2009

Это не совсем имеет для меня смысл. Почему у вас есть маршрут, похожий на следующий:

{controller}/{id}/{controller}/{id}

...