У меня возникла следующая проблема в приложении Blazor (.Net 8). Я пытаюсь использовать перенаправление карт YARP (Microsoft.Extensions.ServiceDiscovery.Yarp 8.0.2) для пересылки запросов, которые достигают сервера Blazor от клиента Blazor, во внутреннюю службу в качестве своего рода обратного прокси-сервера. Он всегда возвращает 502 Bad Gateway. Что мне здесь не хватает?
...
app.UseRouting();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseAuthorization();
app.MapRazorComponents()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorProject.Client._Imports).Assembly);
// Always returns 502. As far as i can tell it forwards the request to itself instead of localhost:5000, but i may be wrong here
app.MapForwarder("/weather-forecast", "http://localhost:5000", transformBuilder =>
{
transformBuilder.AddRequestTransform(async transformContext =>
{
var accessToken = await transformContext.HttpContext.GetTokenAsync("access_token");
transformContext.ProxyRequest.Headers.Authorization = new("Bearer", accessToken);
});
}).RequireAuthorization();
Я пытался добавить новый ForwarderRequestConfig { Version = Version.Parse("1.1") в MapForwarder, но это не принесло успеха.
Я также пытался манипулировать ProxyReqeust через TransformContext и напрямую устанавливать маршрут или выполнять манипуляции с заголовком, но ничего не помогло.
Однако пользовательская обработка через app.Map работает нормально.
// Custom example
var httpClient = new HttpMessageInvoker(new SocketsHttpHandler
{
UseProxy = false,
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.None,
UseCookies = false,
EnableMultipleHttp2Connections = true,
ActivityHeadersPropagator = new ReverseProxyPropagator(DistributedContextPropagator.Current),
ConnectTimeout = TimeSpan.FromSeconds(15),
});
// Setup our own request transform class
var transformer = new CustomHttpTransformer();
var requestConfig = new ForwarderRequestConfig { ActivityTimeout = TimeSpan.FromSeconds(10)};
app.Map("/weather-forecast", async (HttpContext httpContext, IHttpForwarder forwarder) =>
{
var error = await forwarder.SendAsync(httpContext, "http://localhost:5000",
httpClient, requestConfig, transformer);
// Check if the operation was successful
if (error != ForwarderError.None)
{
var errorFeature = httpContext.GetForwarderErrorFeature();
throw errorFeature?.Exception ?? new Exception($"ForwarderError: {error}. Getting standard exception failed");
}
}).RequireAuthorization();
// Content of CustomHttpTransformer
public override async ValueTask TransformRequestAsync(HttpContext httpContext,
HttpRequestMessage proxyRequest, string destinationPrefix, CancellationToken cancellationToken)
{
// Copy all request headers
await base.TransformRequestAsync(httpContext, proxyRequest, destinationPrefix, cancellationToken);
// Customize the query string:
var queryContext = new QueryTransformContext(httpContext.Request);
// Set custom uri
proxyRequest.RequestUri = RequestUtilities.MakeDestinationAddress($"{destinationPrefix}", httpContext.Request.Path, queryContext.QueryString);
// Suppress the original request header, use the one from the destination Uri.
proxyRequest.Headers.Host = null;
// Set authorization Headers
var accessToken = await httpContext.GetTokenAsync("access_token");
proxyRequest.Headers.Authorization = new("Bearer", accessToken);
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... eturns-502
Минимальный API YARP MapForwarder всегда возвращает 502 ⇐ C#
Место общения программистов C#
-
Anonymous
1762806306
Anonymous
У меня возникла следующая проблема в приложении Blazor (.Net 8). Я пытаюсь использовать перенаправление карт YARP (Microsoft.Extensions.ServiceDiscovery.Yarp 8.0.2) для пересылки запросов, которые достигают сервера Blazor от клиента Blazor, во внутреннюю службу в качестве своего рода обратного прокси-сервера. Он всегда возвращает 502 Bad Gateway. Что мне здесь не хватает?
...
app.UseRouting();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseAuthorization();
app.MapRazorComponents()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorProject.Client._Imports).Assembly);
// Always returns 502. As far as i can tell it forwards the request to itself instead of localhost:5000, but i may be wrong here
app.MapForwarder("/weather-forecast", "http://localhost:5000", transformBuilder =>
{
transformBuilder.AddRequestTransform(async transformContext =>
{
var accessToken = await transformContext.HttpContext.GetTokenAsync("access_token");
transformContext.ProxyRequest.Headers.Authorization = new("Bearer", accessToken);
});
}).RequireAuthorization();
Я пытался добавить новый ForwarderRequestConfig { Version = Version.Parse("1.1") в MapForwarder, но это не принесло успеха.
Я также пытался манипулировать ProxyReqeust через TransformContext и напрямую устанавливать маршрут или выполнять манипуляции с заголовком, но ничего не помогло.
Однако пользовательская обработка через app.Map работает нормально.
// Custom example
var httpClient = new HttpMessageInvoker(new SocketsHttpHandler
{
UseProxy = false,
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.None,
UseCookies = false,
EnableMultipleHttp2Connections = true,
ActivityHeadersPropagator = new ReverseProxyPropagator(DistributedContextPropagator.Current),
ConnectTimeout = TimeSpan.FromSeconds(15),
});
// Setup our own request transform class
var transformer = new CustomHttpTransformer();
var requestConfig = new ForwarderRequestConfig { ActivityTimeout = TimeSpan.FromSeconds(10)};
app.Map("/weather-forecast", async (HttpContext httpContext, IHttpForwarder forwarder) =>
{
var error = await forwarder.SendAsync(httpContext, "http://localhost:5000",
httpClient, requestConfig, transformer);
// Check if the operation was successful
if (error != ForwarderError.None)
{
var errorFeature = httpContext.GetForwarderErrorFeature();
throw errorFeature?.Exception ?? new Exception($"ForwarderError: {error}. Getting standard exception failed");
}
}).RequireAuthorization();
// Content of CustomHttpTransformer
public override async ValueTask TransformRequestAsync(HttpContext httpContext,
HttpRequestMessage proxyRequest, string destinationPrefix, CancellationToken cancellationToken)
{
// Copy all request headers
await base.TransformRequestAsync(httpContext, proxyRequest, destinationPrefix, cancellationToken);
// Customize the query string:
var queryContext = new QueryTransformContext(httpContext.Request);
// Set custom uri
proxyRequest.RequestUri = RequestUtilities.MakeDestinationAddress($"{destinationPrefix}", httpContext.Request.Path, queryContext.QueryString);
// Suppress the original request header, use the one from the destination Uri.
proxyRequest.Headers.Host = null;
// Set authorization Headers
var accessToken = await httpContext.GetTokenAsync("access_token");
proxyRequest.Headers.Authorization = new("Bearer", accessToken);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78706248/yarp-minimal-api-mapforwarder-always-returns-502[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия