Двунаправленный маршрут в маршрутизации ASP.NET

Хорошо, вот сделка:

У меня есть страница aspx, которая выглядит как mysite.com/UnitDetails.aspx?UnitID=123.

Прямо сейчас я настроил свою маршрутизацию, чтобы иметь возможность принимать что-то вроде mysite.com/My/Path/123 и перенаправлять его на UnitDetails.aspx. Это прекрасно работает.

Однако то, что я хотел бы также сделать, это перенаправить пользователя на чистый URL-адрес, если он введет страницу aspx. Например, если у вас есть закладка mysite.com/UnitDetails.aspx?UnitID=123, я бы хотел, чтобы она отображалась как mysite.com/My/Path/123.

Как я могу это сделать? Вот что у меня сейчас есть в маршрутизации:

        RouteTable.Routes.MapPageRoute("unit_details", "{area}/{property}/{unit_id}", "~/UnitDetails.aspx")

person Austin    schedule 23.11.2015    source источник


Ответы (1)


Хорошо, я понял это!

Просто нужно было добавить это в мой код UnitDetails.aspx в Page_Load:

        //issue a 301 if legacy route requested to boost SEO
    if (Request.Url.AbsolutePath.Contains("UnitDetails.aspx"))
    {
        var unit = BeachGuide.Models.Unit.GetById(Convert.ToInt32(Request.Params["UnitID"]));
        Response.RedirectPermanent(unit.relative_url);
    }

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

person Austin    schedule 23.11.2015