Мне нужно переписать, а не перенаправлять определенные запросы к файлам GET во внешнее хранилище (размещенное в другом домене)
Я могу добиться этого с помощью перенаправления с использованием промежуточного программного обеспечения для перезаписи, однако вместо этого я хотел бы переписать.
Мне нужно использовать некоторую логику для перезаписи в определенное местоположение файла, поэтому я следовал учебнику https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-2.0&tabs=aspnetcore2x#method-based-rule.
Когда я устанавливаю хост и путь, я вижу, что абсолютный URL-адрес выглядит правильно, но при выходе из метода я получаю «Веб-страница не найдена для веб-адреса:», и отображаемый URL является исходным URL-адресом запроса
RewriteRule.cs (также содержит логику перенаправления URL в ApplyRule (), которую я не хочу использовать)
public static void RewriteStorageFileRequests(RewriteContext context)
{
var request = context.HttpContext.Request;
var path = request.Path.Value;
if (path.Contains("foo/bar"))
{
context.Result = RuleResult.SkipRemainingRules;
request.Host = new HostString("storage/space");
request.Path = path.Replace("foo/bar", string.Empty);
var test2 = request.GetDisplayUrl();
}
}
По сути, если вызов поступает как:
https://localhost:44327/foo/bar/bf34d911-03db-5tda-9c99-c7dd96593159/w3.jpg
Я хочу переписать его на:
https://storage/space/bf34d911-03db-5tda-9c99-c7dd96593159/w3.jpg
Startup.cs
app.UseRewriter(new RewriteOptions().Add(RewriteUrlRule.RewriteStorageFileRequests));
test2 отображает правильный URL в отладчике.
Я попытался установить для хоста пустую строку и передать значение хоста (хранилище / пространство) в путь, но все равно не повезло.
Перед перезаписью
После перезаписи
ОБНОВЛЕНИЕ: я смог переписать на работу, изменив
context.Result = RuleResult.SkipRemainingRules;
до
context.Result = RuleResult.EndResponse;
Однако, когда я добираюсь до URL, он возвращает 200OK, но не показывает изображение.
(см. прикрепленный файл)
Итак, сейчас единственный способ получить изображения - использовать Redirect
Переписать GET