Несколько URL в ASP.NET MVC указывают на одно и то же действие - PullRequest
6 голосов
/ 27 августа 2010

Как мне сопоставить несколько URL-адресов с одним и тем же действием в asp.net mvc

У меня есть:

string url1 = "Help/Me";
string url2 = "Help/Me/Now";
string url3 = "Help/Polemus";
string url1 = "Help/Polemus/Tomorow";

В моем файле global.asax.cs я хочу отобразить все этиссылка на следующее действие:

public class PageController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }
}

Ответы [ 4 ]

25 голосов
/ 04 марта 2016

Теперь в MVC 5 этого можно добиться с помощью атрибута маршрута.

[Route("Help/Me")]
[Route("Help/Me/Now")]
[Route("Help/Polemus")]
[Route("Help/Polemus/Tomorow")]
public ActionResult Index()
 {
    return View();
 }
8 голосов
/ 27 августа 2010

Добавьте следующую строку в таблицу маршрутизации:

routes.MapRoute("RouteName", "Help/{Thing}/{OtherThing}", new { controller = "Page" });

РЕДАКТИРОВАТЬ :

foreach(string url in urls)
    routes.MapRoute("RouteName-" + url, url, new { controller = "Page", action = "Index" });
5 голосов
/ 13 июня 2013

В моем случае я хотел просто объединить два «жестко закодированных» маршрута в один и наткнулся на этот пост.Я хотел немного очистить свой RouteConfig.cs - потому что у него было очень много похожих маршрутов.

В итоге я использовал простую логику 'или' в регулярном выражении и в основном изменил:

routes.MapRoute(
    "UniqueHomePage",
    "Default",
    new { controller = "Redirector", action = "RedirectToRoot" }
);

routes.MapRoute(
    "UniqueHomePage2",
    "Home",
    new { controller = "Redirector", action = "RedirectToRoot" }
);

По одному маршруту:

routes.MapRoute(
    "UniqueHomePageGeneric",
     "{url}",
      new { controller = "Redirector", action = "RedirectToRoot" },
      new { url = "Home|Default" }
);

Примечание для SEO-ориентированных или незаинтересованных: Причина указания нескольких URL-адресов на одно и то же действие заключается в том, чтобы затем перенаправить их на одини снова та же страница.В этом случае домашняя страница.Таким образом, идея состоит в том, чтобы предотвратить дублирование проблем с контентом.Когда вы используете этот метод для указания на НЕ перенаправляющие действия, но действия, которые показывают свои собственные представления, то вы МОЖЕТЕ ПРИЧИНИТЬ проблемы с дублирующимся содержимым: P.

3 голосов
/ 27 августа 2010

Вы можете просто добавить маршруты в таблицу маршрутов, как вам нужно, как и любой другой маршрут.Просто дайте им уникальные имена, жестко запрограммированный URL и укажите их на один и тот же контроллер / действие.Это будет работать нормально.

Если вы используете сопоставление с шаблоном вместо жестко закодированных URL-адресов, просто убедитесь, что все маршруты расположены в правильном порядке, чтобы из списка был выбран правильный маршрут.Поэтому / Help / Me должен отображаться перед / Help / {Page}, если жестко запрограммированный маршрут ведет на страницу, отличную от сопоставленной с шаблоном.Если вы поместите / help / {page} в табель маршрута 1-й, это будет соответствовать / help / me, и ваше жестко закодированное именованное действие для этого маршрута никогда не сработает.

В примечании, если этообщедоступный сайт и SEO важны, пожалуйста, будьте осторожны, если у вас есть несколько URL-адресов, возвращающих одни и те же данные, они будут помечены как дубликаты.Если дело обстоит именно так, используйте тег Canonical , он присваивает ранг всех страниц со всех URL-адресов, которые переходят на эту страницу, на тот, который вы называете, и устраняет проблему с дублирующимся контентом.

...