Existen ocasiones que deseamos acceder a una Cookie o sencillamente guardar algo de información de poco relevancia, en mi caso no lo uso prefiero el Almacenamiento Aislado (Isolated Storage) pero en su momento alguien me pregunto sobre este punto y pues aquí les dejo los métodos de extensión.
public static class ExtensionCookie { /// <summary> /// Obtener una cookie por su nombre /// </summary> /// <param name="document">El <c>HtmlDocument</c></param> /// <param name="cookieName">Nombre de la Cookie</param> /// <returns>El contenido de la cookie</returns> public static string GetCookie(this HtmlDocument document, string cookieName) { // Obtener token de cookie string cookies = document.Cookies; int idx = cookies.IndexOf(cookieName + "="); string val = ""; if (idx == 0 || (idx > 0 && (cookies[idx - 1] == ';' || cookies[idx - 1] == ' '))) { int lastIdx = cookies.IndexOf(';', idx); if (lastIdx == -1) { lastIdx = cookies.Length; } int start = idx + cookieName.Length + 1; val = cookies.Substring(start, lastIdx - start); return HttpUtility.UrlDecode(val); } else { return string.Empty; } } /// <summary> /// Asignar valor a la cookie. /// </summary> /// <param name="document">El <c>HtmlDocument</c></param> /// <param name="cookieName">nombre de la cookie</param> /// <param name="value">El valor de la Cookie</param> /// <param name="expireDays">Dias de Expiracion</param> public static void SetCookie(this HtmlDocument document, string cookieName , string value, int? expireDays) { StringBuilder cookieDefinition = new StringBuilder(cookieName); cookieDefinition.Append('='); cookieDefinition.Append(HttpUtility.UrlEncode(value)); if (expireDays.HasValue) { cookieDefinition.AppendFormat(";expires={0:R}" , DateTime.Now.AddDays(expireDays.Value).ToUniversalTime()); } document.Cookies = cookieDefinition.ToString(); } }
Aquí les dejo un ejemplo de como usar este código.
void btnSetCookie_Click(object sender, RoutedEventArgs e) { TextBox txtCookie = new TextBox(); txtCookie.Text = "Prueba de Asignar Valor a una Cookie"; System.Windows.Browser.HtmlDocument doc = new HtmlDocument(); doc.SetCookie("PruebaCookie", txtCookie.Text, 2); //doc.SetCookie("PruebaCookie", txtCookie.Text, null); } void btnGetCookie_Click(object sender, RoutedEventArgs e) { System.Windows.Browser.HtmlDocument doc = new HtmlDocument(); TextBox txtCookie = new TextBox(); txtCookie.Text = doc.GetCookie("PruebaCookie"); }
Espero que le sea de mucha utilidad.