Воспроизведение логики MapForwarder с помощью MapReverseProxy – YARPC#

Место общения программистов C#
Ответить
Anonymous
 Воспроизведение логики MapForwarder с помощью MapReverseProxy – YARP

Сообщение Anonymous »

У меня есть устаревшее приложение ASP.NET MVC, которое я хотел бы постепенно перенести в приложение ASP.NET Core 8 с помощью YARP.
Представьте, что мое устаревшее приложение размещено под url foo.com, а мое прокси-приложение размещено по URL bar.com. Когда я перехожу на главную страницу bar.com, срабатывает логика аутентификации, и меня перенаправляют на bar.com/account/login, где отображается содержимое из foo. .com/account/login. Это отлично работает для меня. Вот мой код:
var httpClient = new HttpMessageInvoker(new SocketsHttpHandler
{
UseProxy = false,
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.None,
UseCookies = true,
EnableMultipleHttp2Connections = true,
ActivityHeadersPropagator = new ReverseProxyPropagator(DistributedContextPropagator.Current),
ConnectTimeout = TimeSpan.FromSeconds(60),
});

var transformer = HttpTransformer.Empty;
var requestOptions = new ForwarderRequestConfig();

app.MapForwarder("/{**catch-all}", app.Configuration["ProxyTo"], requestOptions, transformer, httpClient);

Теперь я хотел бы переключиться с MapForwarder на MapReverseProxy. Я соответственно изменил свой код
builder.Services.AddHttpForwarder();
builder.Services.AddReverseProxy()
.ConfigureHttpClient((context, handler) =>
{
handler.AllowAutoRedirect = false;
handler.UseProxy = false;
handler.EnableMultipleHttp2Connections = true;
handler.UseCookies = true;
handler.ConnectTimeout = TimeSpan.FromSeconds(60);
})
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

builder.Services.AddSystemWebAdapters()
.AddRemoteAppClient(options =>
{
options.RemoteAppUrl = new Uri(builder.Configuration
["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]!);
options.ApiKey = builder.Configuration["RemoteAppApiKey"]!;
})
.AddAuthenticationClient(true);

...

app.MapReverseProxy();

Теперь поведение изменилось. Если handler.AllowAutoRedirect имеет значение false, то bar.com перенаправляется на foo.com/account/login – я не хочу менять домены.
Если handler.AllowAutoRedirect имеет значение true, то bar.com отображает содержимое foo.com/account/login – домен не меняется, но путь /аккаунт/логин не сохраняется.
Что я делаю не так?
моя конфигурация такая вот так просто:
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "fallbackCluster",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"fallbackCluster": {
"Destinations": {
"fallbackApp": {
"Address": "https://localhost:44311/"
}
}
}
}
},


Подробнее здесь: https://stackoverflow.com/questions/787 ... proxy-yarp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»