Двупосочен маршрут в ASP.NET Routing

Добре, ето сделката:

Имам 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