У меня есть - я думаю - сложный URL-адрес для работы в ASP MVC 1.0: Все мои действия на большинстве контроллеров требуют по два параметра все время: учетная запись и проект. Это соответствует требованиям каждого Action. Это означает, что типичный URL выглядит так:Обработка сложных URL-адресов в ASP MVC
http://abcd.com/myaccount/projects/project_id/sites/edit/12
В этом примере: MyAccount это имя учетной записи. проектов может быть контроллером, другие варианты похожи на мест, сотрудников. PROJECT_ID является идентификатор проекта в MyAccount, сайтов может быть контроллер, другие варианты, как сотрудников или платежей. Редактирование является действием и является идентификатором сайта, отредактированным. (надеюсь, что это достаточно ясно)
Теперь один из вариантов - создать маршрут и передать project_id и учетную запись во все действия контроллеров, добавив два дополнительных параметра ко всем действиям. Это не очень желательно, и я не уверен, что два контроллера (проекты и сайты) будут работать здесь.
Моей идеальной ситуацией является использование какого-то контекста, который перемещается с вызовом к действию контроллера и хранит в нем project_id и myaccount. Остальные параметры могут быть урегулированы в обычном порядке, как:
// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}
Любые идеи относительно того, как/где это может произойти? Также как это будет работать с ActionLink (т. Е. Создание правильных ссылок на основе этого контекста)?
Спасибо!
Это один из способов взглянуть на него. Это точно так же, как работает Basecamp (37Signals). Если вы создаете учетную запись в Basecamp, вы получаете такой URL-адрес: http://accountName.basecamphq.com/projects/123/notes/345 ZenDesk также точно такой же. (Я думаю, что это GetSatisfaction). Мои требования очень похожи. – Khash
Но, конечно же, имя учетной записи не является контроллером, а параметром, который не нужен контроллеру, но само приложение, чтобы обеспечить доступ к вашим страницам в правильную компанию. Вы могли бы что-то сделать, как предложил Джон Дауни. Мы сделали что-то подобное, где я есть, переопределяя контроллеры родительским контроллером и фиксируя то, что фактически является параметром accountname, и отображают/аутентифицируются по-разному в зависимости от того, кто они и куда они хотят идти. –