ASP.NET路由中的双向路由
好吧,交易如下: 我有一个类似mysite.com/UnitDetails.aspx?UnitID=123的aspx页面 现在,我已经设置了路由,以便能够接收类似mysite.com/my/Path/123的内容,并将其重定向到UnitDetails.aspx。这很有效 但是,如果用户在aspx页面中键入内容,我还希望能够将用户重定向到干净的url。例如,如果您将mysite.com/UnitDetails.aspx?UnitID=123作为书签,我希望它显示为mysite.com/My/Path/123 我怎样才能做到这一点?以下是我目前的路线:ASP.NET路由中的双向路由,asp.net,routing,asp.net-routing,Asp.net,Routing,Asp.net Routing,好吧,交易如下: 我有一个类似mysite.com/UnitDetails.aspx?UnitID=123的aspx页面 现在,我已经设置了路由,以便能够接收类似mysite.com/my/Path/123的内容,并将其重定向到UnitDetails.aspx。这很有效 但是,如果用户在aspx页面中键入内容,我还希望能够将用户重定向到干净的url。例如,如果您将mysite.com/UnitDetails.aspx?UnitID=123作为书签,我希望它显示为mysite.com/My/Pat
RouteTable.Routes.MapPageRoute("unit_details", "{area}/{property}/{unit_id}", "~/UnitDetails.aspx")
好吧,我知道了 只需将此添加到页面加载中的my UnitDetails.aspx代码中:
//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,我们有一个基本案例,通过301重定向将他们重定向到新url。这将帮助搜索引擎知道如何使用新路由作为规范url