Я делаю прокси для другой (целевой) услуги. Целевая служба не может быть изменена. Он должен обрабатывать некоторые вызовы и перенаправить все остальные в устаревшую целевую службу. /> Q: Как мне заставить ASP.net Mapfallback для выполнения запроса?// map a route to capture all unhandled requests and forward them to the legacy service
app.MapFallback(async (context) =>
{
var forwarder = context.RequestServices.GetRequiredService();
// reads the request, modifies some of it, forwards it to the legacy service, copies the response back
await forwarder.ForwardRequest(context);
context.Response.OnCompleted(() =>
{
// this shows up in the console
Console.WriteLine($"Completed request: [{context.Request.Method}] {context.Request.Path}");
return Task.CompletedTask;
});
// the HTTP request doesn't complete, even though the "OnCompleted" callback is called
});
< /code>
Класс Forwarder принимает контекст. Проверка, копирует его в новый httprequestmessage, а затем копирует ответ таким образом: < /p>
// Forward the request to the target URL and get the response
using var forwardResponse = await httpClient.SendAsync(forwardRequest);
context.Response.StatusCode = (int)forwardResponse.StatusCode;
// Copy the response headers from the forwarded request
foreach (var header in forwardResponse.Headers)
{
context.Response.Headers[header.Key] = header.Value.ToArray();
}
// Copy the response content if it exists
if (forwardResponse.Content?.Headers.ContentLength > 0)
{
using var streamReader = new StreamReader(forwardResponse.Content.ReadAsStream());
resContentStr = await streamReader.ReadToEndAsync();
context.Response.ContentType = forwardResponse.Content.Headers.ContentType?.ToString();
await context.Response.WriteAsync(resContentStr);
await context.Response.BodyWriter.CompleteAsync();
}
< /code>
Тестовый код просто создает HTTP-запрос для прокси: < /p>
var legacyRequest = new HttpRequestMessage(HttpMethod.Post, proxyUrl);
string content = ContentChunk("TEST") + ContentChunk("SECOND_");
legacyRequest.Content = new StringContent(content, Encoding.UTF8, "application/x-json-stream");
var response = httpClient.Send(legacyRequest);
// hangs on the line above, throws on timeout
Console.WriteLine("Sent");
Подробнее здесь: https://stackoverflow.com/questions/797 ... he-request
.Net Minimal API app.mapfallback не выполняет запрос ⇐ C#
Место общения программистов C#
-
Anonymous
1752697857
Anonymous
Я делаю прокси для другой (целевой) услуги. Целевая служба не может быть изменена. Он должен обрабатывать некоторые вызовы и перенаправить все остальные в устаревшую целевую службу. /> Q: Как мне заставить ASP.net Mapfallback для выполнения запроса?// map a route to capture all unhandled requests and forward them to the legacy service
app.MapFallback(async (context) =>
{
var forwarder = context.RequestServices.GetRequiredService();
// reads the request, modifies some of it, forwards it to the legacy service, copies the response back
await forwarder.ForwardRequest(context);
context.Response.OnCompleted(() =>
{
// this shows up in the console
Console.WriteLine($"Completed request: [{context.Request.Method}] {context.Request.Path}");
return Task.CompletedTask;
});
// the HTTP request doesn't complete, even though the "OnCompleted" callback is called
});
< /code>
Класс Forwarder принимает контекст. Проверка, копирует его в новый httprequestmessage, а затем копирует ответ таким образом: < /p>
// Forward the request to the target URL and get the response
using var forwardResponse = await httpClient.SendAsync(forwardRequest);
context.Response.StatusCode = (int)forwardResponse.StatusCode;
// Copy the response headers from the forwarded request
foreach (var header in forwardResponse.Headers)
{
context.Response.Headers[header.Key] = header.Value.ToArray();
}
// Copy the response content if it exists
if (forwardResponse.Content?.Headers.ContentLength > 0)
{
using var streamReader = new StreamReader(forwardResponse.Content.ReadAsStream());
resContentStr = await streamReader.ReadToEndAsync();
context.Response.ContentType = forwardResponse.Content.Headers.ContentType?.ToString();
await context.Response.WriteAsync(resContentStr);
await context.Response.BodyWriter.CompleteAsync();
}
< /code>
Тестовый код просто создает HTTP-запрос для прокси: < /p>
var legacyRequest = new HttpRequestMessage(HttpMethod.Post, proxyUrl);
string content = ContentChunk("TEST") + ContentChunk("SECOND_");
legacyRequest.Content = new StringContent(content, Encoding.UTF8, "application/x-json-stream");
var response = httpClient.Send(legacyRequest);
// hangs on the line above, throws on timeout
Console.WriteLine("Sent");
Подробнее здесь: [url]https://stackoverflow.com/questions/79703998/net-minimal-api-app-mapfallback-doesnt-complete-the-request[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия