asp.net web api - the - ¿Cómo configuro una cookie de respuesta en HttpReponseMessage?
request cookies asp (2)
Me gustaría crear un servicio de inicio de sesión de demostración en la API web y necesito establecer una cookie en la respuesta. ¿Cómo puedo hacer eso? ¿O hay alguna forma mejor de hacer la autorización?
Puede agregar la cookie a la colección HttpContext.Current.Response.Cookies.
var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
HttpContext.Current.Response.Cookies.Add(cookie);
Agregue una referencia a System.Net.Http.Formatting.dll
y use el método de extensión AddCookies
definido en la clase HttpResponseHeadersExtensions
.
Aquí hay una publicación de blog que describe este enfoque y el tema de MSDN .
Si ese ensamblaje no es una opción para usted, aquí está mi respuesta anterior de antes de que esta fuera una opción:
La respuesta anterior sigue
Prefiero un enfoque que se mantenga dentro del ámbito de HttpResponseMessage
sin sangrado en HttpContext, que no se puede probar de forma unitaria y que no siempre se aplica dependiendo del host:
/// <summary>
/// Adds a Set-Cookie HTTP header for the specified cookie.
/// WARNING: support for cookie properties is currently VERY LIMITED.
/// </summary>
internal static void SetCookie(this HttpResponseHeaders headers, Cookie cookie) {
Requires.NotNull(headers, "headers");
Requires.NotNull(cookie, "cookie");
var cookieBuilder = new StringBuilder(HttpUtility.UrlEncode(cookie.Name) + "=" + HttpUtility.UrlEncode(cookie.Value));
if (cookie.HttpOnly) {
cookieBuilder.Append("; HttpOnly");
}
if (cookie.Secure) {
cookieBuilder.Append("; Secure");
}
headers.Add("Set-Cookie", cookieBuilder.ToString());
}
Luego puede incluir una cookie en la respuesta de esta manera:
HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));