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