Apigateway/ApiGateway/Middleware/OcelotResponseMiddleware.cs

80 lines
2.8 KiB
C#
Raw Normal View History

2022-11-02 11:31:23 -05:00
using Ocelot.Infrastructure.Extensions;
using Ocelot.Logging;
using Ocelot.Middleware;
using Ocelot.Responder;
2023-01-10 10:35:15 -05:00
using System.IO;
using System.Security.Policy;
using System.Text;
2022-11-02 11:31:23 -05:00
namespace ApiGateway.Middleware
2022-11-02 11:31:23 -05:00
{
public class OcelotResponseMiddleware : OcelotMiddleware
2022-11-02 11:31:23 -05:00
{
private readonly RequestDelegate _next;
private readonly IHttpResponder _responder;
private readonly IErrorsToHttpStatusCodeMapper _codeMapper;
public OcelotResponseMiddleware(
RequestDelegate next,
IHttpResponder responder,
IErrorsToHttpStatusCodeMapper codeMapper,
IOcelotLoggerFactory loggerFactory)
: base(loggerFactory.CreateLogger<OcelotResponseMiddleware>())
{
_next = next;
_responder = responder;
_codeMapper = codeMapper;
}
public async Task Invoke(HttpContext httpContext)
{
2023-01-10 10:35:15 -05:00
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
var logger = loggerFactory.CreateLogger("ResMiddleware");
string date = DateTime.Now.ToString();
var sb = new StringBuilder()
.Append("Ingreso ResMiddleware: ").AppendLine(date);
2022-11-02 11:31:23 -05:00
await _next.Invoke(httpContext);
if (httpContext.Response.HasStarted)
2023-01-10 10:35:15 -05:00
{
sb.Append("Ingresa al if y return");
logger.LogInformation(69, sb.ToString());
2022-11-02 11:31:23 -05:00
return;
2023-01-10 10:35:15 -05:00
}
2022-11-02 11:31:23 -05:00
var errors = httpContext.Items.Errors();
if (errors.Count > 0)
{
2023-01-10 10:35:15 -05:00
//Logger.LogWarning($"{errors.ToErrorString()} errors found in {MiddlewareName}. Setting error response for request path:{httpContext.Request.Path}, request method: {httpContext.Request.Method}");
sb.Append("Hay errores res middleware");
sb.Append("Cant errores: " + errors.Count.ToString());
sb.Append(errors.ToErrorString());
logger.LogError(71, sb.ToString());
2022-11-02 11:31:23 -05:00
var statusCode = _codeMapper.Map(errors);
var error = string.Join(",", errors.Select(x => x.Message));
httpContext.Response.StatusCode = statusCode;
// output error
await httpContext.Response.WriteAsync(error);
}
else
{
2023-01-10 10:35:15 -05:00
//Logger.LogDebug("no pipeline errors, setting and returning completed response");
sb.Append("no pipeline errors, setting and returning completed response");
logger.LogInformation(69, sb.ToString());
2022-11-02 11:31:23 -05:00
var downstreamResponse = httpContext.Items.DownstreamResponse();
await _responder.SetResponseOnHttpContext(httpContext, downstreamResponse);
}
}
}
}