Как перенаправить короткий URL на более длинный описательный URL - PullRequest
0 голосов
/ 06 ноября 2018

Я хотел бы предоставить пользователям короткий URL-адрес www.example.com/books/DOP/ и перенаправить их на www.example.com/Books/Daughters-of-the-Pioneers-Autobiographies/index.html. Цель состоит в том, чтобы избавить пользователя от необходимости вводить полный URL-адрес.

Я попытался создать страницу бритвы следующим образом с перенаправлением на OnGet, но безуспешно. Какие-нибудь мысли?

namespace SLCore21.Pages.Books.DOP
{
    public class indexModel : PageModel
    {
        public void OnGet()
        {
           LocalRedirectPermanent("~/Books/Daughters-of-the-Pioneers-Autobiographies/index.html"); 
        }
    }
}

1 Ответ

0 голосов
/ 06 ноября 2018

Для подхода, который вы используете для работы, вам необходимо вернуть результат LocalRedirectPermanent, что также требует изменения сигнатуры обработчика OnGet для возврата, например. IActionResult. Вот обновленный пример:

public IActionResult OnGet()
{
    return LocalRedirectPermanent("~/Books/Daughters-of-the-Pioneers-Autobiographies/index.html"); 
}

Использование выделенной страницы Razor для этого может быть немного излишним: я бы представил пользовательское промежуточное ПО, которое использует карту источника к месту назначения и выполняет там такие перенаправления. Вот пример функции промежуточного программного обеспечения, чтобы продемонстрировать, как это может работать:

var redirectMap = new Dictionary<string, string>
{
    ["/books/dop"] = "/Books/Daughters-of-the-Pioneers-Autobiographies/index.html"
};

app.Use(async (ctx, next) =>
{
    if (redirectMap.TryGetValue(
        ctx.Request.Path.ToString().TrimEnd('/').ToLower(),
        out var redirectPath))
    {
        ctx.Response.Redirect(redirectPath, true);
        return;
    }

    await next();
});

Я добавил здесь жестко закодированный redirectMap, но я перенесу это в конфигурацию, если это будет что-то, что будет меняться достаточно регулярно.

Сам код достаточно прост - он просматривает входящий запрос, удаляет завершающие символы / с пути, преобразует его в нижний регистр и затем проверяет, существует ли значение в redirectMap. Если он существует, код просто выполняет перенаправление (true для постоянного) и замыкает конвейер. В противном случае выполнение передается следующему промежуточному программному обеспечению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...