Skip to content
Snippets Groups Projects
RequestCookieHandler .cs 1.35 KiB
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);
        }

    }
}