2010-07-21 4 views
0

мне нужно создать пользовательскую маршрутизацию для этого URL:Asp.net MVC пользовательских маршрутизации

/par1/par2/par3/par99/11 

URL-адрес должен перенаправлять на

home/index/11 

11 является Id

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

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

/par1/par2/11

или

/par1/par2/par3/111

или

/par1/3

ответ

1

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

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

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

+0

спасибо. Если я бы создать URL-адрес, как это: http://www.somesite.com/category/seo1/seo2/SomeSeoWords/11/ Было бы просто? Обратите внимание, что в начале есть ключевое слово Category, тогда есть несколько категорий (для SEO), а затем идентификатор. –

+0

@ Андреа: Я написал вам ответ. Что с этим не так? Это решение, которое вы приняли, не поддерживает размещение данных seo перед идентификатором. – LukLed

+0

Нет, он работает только так, как я писал выше, потому что {* seostuff} - это все, и он должен быть в конце.Чтобы соответствовать вашему примеру, вторым параметром должна быть '' category/{id}/{* seo} "' Но это не сработает, если вы хотите, чтобы часть id была в конце. – Buildstarted

0

Может быть, вы начнете с это и приспособить к вашим потребностям:

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}" 
); 
0

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

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

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

0

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

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

{*seo}/{id} 

Читать все подробности о пользовательском классе маршрута и использовать его, если вам нравится:

Custom Asp.net MVC route class with catch-all segment anywhere in the URL