Asp.net MVC пользовательская маршрутизация - PullRequest
0 голосов
/ 22 июля 2010

Мне нужно создать собственную маршрутизацию для этого URL:

/par1/par2/par3/par99/11

URL должен перенаправить на

home/index/11

11 - это идентификатор

Мне нужен только этот параметр, другой параметр (par1/par2/...) предназначен только для целей SEO и может быть любым словом.

par1, par2 и т. Д. Создаются динамически, поэтому URL может быть:

/par1/par2/11

или

/par1/par2/par3/111

или

/par1/3

Ответы [ 4 ]

1 голос
/ 22 июля 2010

Вы можете просто перевернуть его и перейти с

routes.MapRoute(
    "Route",
    "{id}/{*seostuff}",
    new {controller = "Home", action="Index", seo = UrlParameter.Optional});

, который позволит вам отображать URL, такие как http://www.somesite.com/11/whatever/goes-here/will-be-whatever-you/want

0 голосов
/ 01 марта 2011

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

В этом случае определение URL будет

{*seo}/{id}

Прочитайте все подробности о пользовательском классе маршрута и используйте его, если хотите:

Пользовательский класс маршрута Asp.net MVC с универсальным сегментом в любом месте URL

0 голосов
/ 22 июля 2010

Поскольку ваш идентификатор в конце, вам нужно будет сделать 99 маршрутов, чтобы обработать все промежуточное содержимое, чтобы маршрут ID к контроллеру (легко).

Я бы прикрепил идентификатор слева от "SEO-материала", если это возможно, чтобы его было проще отбросить, как описано в @Morder. Параметр {*seostuff} перехватывает косую черту ('/'), а параметры {seo1}, {seo2} - нет.

посмотрите, как stackoverflow выполняет URL; после идентификатора все выбрасывается.

0 голосов
/ 22 июля 2010

Возможно, вы начнете с этого и подстроитесь под свои нужды:

routes.MapRoute(
    "Def0", // Route name
    "{controller}/{action}/{seo1}/{seo2}/{seo3}/{id}"
);

routes.MapRoute(
    "Def1", // Route name
    "{controller}/{action}/{seo1}/{seo2}/{id}"
);

routes.MapRoute(
    "Def2", // Route name
    "{controller}/{action}/{seo1}/{id}"
);

routes.MapRoute(
    "Def3", // Route name
    "{controller}/{action}/{id}"
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...