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.