Newer
Older
using System.Net;
namespace GatewayAPI
{
public class RequestCookieHandler : DelegatingHandler
{
private readonly IHttpContextAccessor httpContextAccessor;
public RequestCookieHandler(IHttpContextAccessor httpContextAccessor)
{
this.httpContextAccessor = httpContextAccessor;
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpContext? context = httpContextAccessor.HttpContext;
if (context?.Request.Cookies != null && request.RequestUri != null)
{
CookieContainer cookieContainer = new CookieContainer();
foreach (KeyValuePair<string, string> cookie in context.Request.Cookies)
{
if (!string.IsNullOrEmpty(cookie.Value) && (cookie.Key == "AccessToken" || cookie.Key == "RefreshToken"))
cookieContainer.Add(request.RequestUri, new Cookie(cookie.Key, cookie.Value));
}
var cookieHeader = cookieContainer.GetCookieHeader(request.RequestUri);
if (!string.IsNullOrEmpty(cookieHeader))
request.Headers.Add("Cookie", cookieHeader);
}
return await base.SendAsync(request, cancellationToken);
}
}
}