Как заставить ответ не запускаться в промежуточном программном обеспечении ASP.NET Core?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить ответ не запускаться в промежуточном программном обеспечении ASP.NET Core?

Сообщение Anonymous »

Я хотел бы создать резервное промежуточное программное обеспечение для пересылки запроса внешней службе в случае сбоя при исходной обработке (500).
Вот мой код:
  • FallbackMiddleware.cs

Код: Выделить всё

public async Task InvokeAsync(HttpContext context)
{
context.Request.EnableBuffering();
await _next(context); // returns 500
if ((int)context.Response.StatusCode >= 500)
{
// calls an externeral service which returns 200
await _forwarder.SendAsync(context, "http://localhost:5002", _client);
}
}
  • 500Controller.cs

Код: Выделить всё

[HttpGet]
public ActionResult Get()
{
return new StatusCodeResult(500);
}
Приведенный выше код не сообщает о том, что запрос не может быть перенаправлен, ответ уже начался. Поэтому я нашел и добавил эту конфигурацию в Program.cs:

Код: Выделить всё

builder.Services.AddReverseProxy().AddTransforms(m =>
{
m.AddResponseTransform(context =>
{
context.SuppressResponseBody = true;
return default;
});
});
Однако эта конфигурация не работает так, как я ожидал, сообщение об ошибке остается. Действительно ли возможно заставить ответ не запускаться в промежуточном программном обеспечении? Или мне следует попробовать другой подход для реализации этой резервной модели?
Ссылка:
  • Повторная попытка «безопасных» HTTP-запросов.


Подробнее здесь: https://stackoverflow.com/questions/790 ... middleware
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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