.Net Minimal API app.mapfallback не выполняет запросC#

Место общения программистов C#
Ответить
Anonymous
 .Net Minimal API app.mapfallback не выполняет запрос

Сообщение 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");


Подробнее здесь: https://stackoverflow.com/questions/797 ... he-request
Ответить

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

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

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

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

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