У меня есть сайт DotnetCore 2.1, на котором я хочу перенаправить старые страницы ASPX веб-форм и даже старые классические страницы ASP на соответствующие страницы, используя базу данных для сопоставления новой страницы.
Например, приходит запрос на mywebsite.com/factoryclearancesale.aspx, и я хочу перенаправить его на mywebsite.com/factory-clearance
Аналогичным образом, если поступит запрос для mywebsite.com/pressreleases.asp, он будет перенаправлен на mywebsite.com/press-releases.
По сути, запрос перехватывается, выполняется поиск в базе данных для получения новой соответствующей страницы, затем я использую RedirectToPagePermanent (newPageName) в контроллере.
Звучит очень просто (в прежние времена response.redirect работал бы нормально), но вместо перенаправления на правильную страницу результат (для первого примера):
mywebsite.com/?page=%2Ffactory-clearance
Поскольку у меня нет маршрутов, я подумал, что этот метод будет работать, но он вставляет "page =" в URI, что не помогает.
Есть ли способ сделать это правильно?
Вот полный метод (мои изменения в чужом коде внизу)
public virtual IActionResult GeneralRedirect()
{
// use Request.RawUrl, for instance to parse out what was invoked
// this regex will extract anything between a "/" and a ".aspx"
var regex = new Regex(@"(?<=/).+(?=\.aspx)", RegexOptions.Compiled);
var rawUrl = _webHelper.GetRawUrl(this.HttpContext.Request);
var aspxfileName = regex.Match(rawUrl).Value.ToLowerInvariant();
switch (aspxfileName)
{
//URL without rewriting
case "product":
{
return RedirectProduct(_webHelper.QueryString<string>("productid"), false);
}
case "category":
{
return RedirectCategory(_webHelper.QueryString<string>("categoryid"), false);
}
case "manufacturer":
{
return RedirectManufacturer(_webHelper.QueryString<string>("manufacturerid"), false);
}
case "producttag":
{
return RedirectProductTag(_webHelper.QueryString<string>("tagid"), false);
}
case "news":
{
return RedirectNewsItem(_webHelper.QueryString<string>("newsid"), false);
}
case "blog":
{
return RedirectBlogPost(_webHelper.QueryString<string>("blogpostid"), false);
}
case "topic":
{
return RedirectTopic(_webHelper.QueryString<string>("topicid"), false);
}
case "profile":
{
return RedirectUserProfile(_webHelper.QueryString<string>("UserId"));
}
case "compareproducts":
{
return RedirectToRoutePermanent("CompareProducts");
}
case "contactus":
{
return RedirectToRoutePermanent("ContactUs");
}
case "passwordrecovery":
{
return RedirectToRoutePermanent("PasswordRecovery");
}
case "login":
{
return RedirectToRoutePermanent("Login");
}
case "register":
{
return RedirectToRoutePermanent("Register");
}
case "newsarchive":
{
return RedirectToRoutePermanent("NewsArchive");
}
case "search":
{
return RedirectToRoutePermanent("ProductSearch");
}
case "sitemap":
{
return RedirectToRoutePermanent("Sitemap");
}
case "recentlyaddedproducts":
{
return RedirectToRoutePermanent("NewProducts");
}
case "shoppingcart":
{
return RedirectToRoutePermanent("ShoppingCart");
}
case "wishlist":
{
return RedirectToRoutePermanent("Wishlist");
}
case "CheckGiftCardBalance":
{
return RedirectToRoutePermanent("CheckGiftCardBalance");
}
default:
break;
}
//Code to redirect old pages to new ones
string oldURI = rawUrl.TrimStart(Convert.ToChar(@"/"));
string newURI = Nop.Web.Custom.MyData.GetNewURIFromOldURI(oldURI);
if (newURI.Length > 0)
{
return RedirectToPagePermanent(newURI); //This injects ?page= into the new URI - not expected, so must be doing wrong!!!!
}
//no permanent redirect in this case
return RedirectToRoute("HomePage");
}