MaxBeauchemin
4/3/2020 - 8:53 PM

ASP.NET Cookies

using Newtonsoft.Json;
using System;
using System.Web;

namespace Site.Services.Common
{
  public static class CookieHelper
  {
    public static T GetCookieValue<T>(CookieKey key)
    {
      var cookies = HttpContext.Current?.Request?.Cookies;

      if (cookies != null)
      {
        var compositeKey = CompositeKey(key);

        if (cookies[compositeKey] != null)
        {
          var val = JsonConvert.DeserializeObject<T>(cookies[compositeKey].Value);
          if (val != null)
          {
            return val;
          }
        }
      }
      
      return default(T);
    }

    public static void SetCookieValue(CookieKey key, object value, DateTime expiration)
    {
      var cookies = HttpContext.Current?.Response?.Cookies;

      if (cookies != null)
      {
        var compositeKey = CompositeKey(key);

        var json = JsonConvert.SerializeObject(value);

        var cookie = new HttpCookie(compositeKey);

        cookie.Value = json;
        cookie.Expires = expiration;

        if (cookies[compositeKey] != null)
        {
          cookies.Remove(compositeKey);
        }

        HttpContext.Current.Response.Cookies.Add(cookie);
      }
    }

    private static string CompositeKey(CookieKey key)
    {
      var format = "Key_{0}";

      return string.Format(format, millId, environment, key.ToString());
    }
  }
}