2016-10-07 8 views
0

У меня есть сайт asp.net MVC 5.asp.net MVC - сократить маршрут, отключить старый маршрут

У меня есть много маршрутов - например

http://example.com/places/placename 
http://example.com/home/about 
http://example.com/home/privacy 

Первый динамична - два последних просто указывают на о & действия секретности в домашнем контроллере.

Это прекрасно работает, однако, я бы хотел, чтобы все URL '/ home /' указывали на корень. например

http://example.com/home/privacy 

Если указать

http://example.com/privacy 

Я хотел бы также, как старый маршрут больше не работы (дублирование контента плохо для SEO).

Первое легко сделать, но старый маршрут все еще работает. Каков элегантный способ справиться с этим?

thx.

+0

Проверьте этот ответ HTTP : //stackoverflow.com/questions/3337372/asp-net-mvc-removing-controller-name-from-url –

ответ

2

Вы можете использовать Attribute routing и украсить эти действия с помощью шаблона, который вы хотите.

public class HomeController : Controller 
{ 
    [Route("privacy")] 
    public ActionResult Privacy() 
    { 
     return view(); 
    } 
    [Route("about")] 
    public ActionResult About() 
    { 
     return view(); 
    } 
} 

Для того, чтобы использовать атрибут Routing его должен быть включен по телефону MapMvcAttributeRoutes в вашем RouteConfig:

routes.MapMvcAttributeRoutes(); 

Другим вариантом является, чтобы указать определение маршрута перед регистрацией определения маршрута по умолчанию (порядок . Специфическое определение маршрута должно быть зарегистрировано до определения маршрута определения остатка по умолчанию) в вашем RouteConfig (традиционный подход к маршрутизации)

Итак, добавьте sp ecific определение маршрута в методе RegisterRoutes в RouteConfig.cs

//register route for about 
routes.MapRoute("about", "about", 
     new { controller = "Home", action = "about" }); 

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

При традиционном подходе маршрутизации, старый (youtSite/home/about) и новый шаблон маршрута (yourSite/about) будет работать. Если вы хотите только yourSite/about, я предлагаю вам перейти на подход маршрутизации атрибутов.

+0

Спасибо - как бы вы это сделали в routeeconfig.cs - и не допустить домой/проваливаться для/home/ver а также маршрут маршрута? – niico

+0

@niico Обновлен ответ с этой информацией. – Shyju

1

вы можете использовать маршрутизацию атрибутов MVC5. Для включения атрибутов маршрутизации, запись ниже строки в RouteConfig.cs

routes.MapMvcAttributeRoutes(); // Add this line 

, а затем ваш метод действий HomeController как этого

[Route("privacy")] 
public ActionResult Privacy() 
{ 
    return view(); 
} 

, чтобы узнать больше о MVC5 Attribute Routing