mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-05-03 01:02:51 +08:00
55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Ocelot.Library.Middleware;
|
|
using Ocelot.Library.ScopedData;
|
|
|
|
namespace Ocelot.Library.Responder.Middleware
|
|
{
|
|
public class HttpResponderMiddleware : OcelotMiddleware
|
|
{
|
|
private readonly RequestDelegate _next;
|
|
private readonly IHttpResponder _responder;
|
|
private readonly IScopedRequestDataRepository _scopedRequestDataRepository;
|
|
private readonly IErrorsToHttpStatusCodeMapper _codeMapper;
|
|
|
|
public HttpResponderMiddleware(RequestDelegate next,
|
|
IHttpResponder responder,
|
|
IScopedRequestDataRepository scopedRequestDataRepository,
|
|
IErrorsToHttpStatusCodeMapper codeMapper)
|
|
:base(scopedRequestDataRepository)
|
|
{
|
|
_next = next;
|
|
_responder = responder;
|
|
_scopedRequestDataRepository = scopedRequestDataRepository;
|
|
_codeMapper = codeMapper;
|
|
}
|
|
|
|
public async Task Invoke(HttpContext context)
|
|
{
|
|
await _next.Invoke(context);
|
|
|
|
if (PipelineError())
|
|
{
|
|
var errors = GetPipelineErrors();
|
|
|
|
var statusCode = _codeMapper.Map(errors);
|
|
|
|
if (!statusCode.IsError)
|
|
{
|
|
await _responder.CreateErrorResponse(context, statusCode.Data);
|
|
}
|
|
else
|
|
{
|
|
await _responder.CreateErrorResponse(context, 500);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var response = _scopedRequestDataRepository.Get<HttpResponseMessage>("Response");
|
|
|
|
await _responder.CreateResponse(context, response.Data);
|
|
}
|
|
}
|
|
}
|
|
} |