RedirectToPage и RedirectToPagePermanent не работают должным образом - PullRequest
0 голосов
/ 14 мая 2019

У меня есть сайт 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...