visual the studio net mvc how from does create cookie asp application asp.net-web-api dotnet-httpclient

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"));