Le permite agregar cookies para ihttpactionResult en los controladores Webapi.
Contenido
Hay varias formas de agregar cookies a la respuesta en Webapi. La forma recomendada, según los documentos, es usar el método de extensión resp.Headers.AddCookies(cookies) , pero hay algunas desventajas:
= char en un valor de cookie.CookieHeaderValue admite pares de valor de nombre y tales colecciones se presentarán como cookie-name=key1=value1&key2=value2 , pero la colección se codificará si intenta configurarlo a través de simplemente pasar una cadena. Pasar las cadenas de recolección de cookies directamente es útil para los casos cuando pasa los valores de las cookies a través de servicios, por ejemplo, integración con API heredadas basadas en cookies. Otra forma es establecer cookies en httpresponse.cookies a través de HttpContext (ejemplo de verificación), pero hay desventajas aún más graves:
HttpContext en Webapi es una mala práctica, porque no puede obtenerlos en sí mismo.new Thread() . Mejor tener una API simple para IHttpActionResult W/O descritas en desventajas. También es bueno tener el soporte localhost o "habilitar estas cookies para todos los subdominios" Característica fuera de la caja.
Puede instalar aspnet.webapi.cookiespassthrough paquete a través de NUGET.
var cookieDescriptors = new [ ]
{
// simple cookie with Path=/
new CookieDescriptor ( "test-cookie" , "1" ) ,
// encode
new CookieDescriptor ( "test-cookie2" , "2=" ) {
CodeStatus = CookieCodeStatus . Encode
} ,
// expires, secure, httponly + decode
new CookieDescriptor ( "test-cookie3" , "a%3D3" ) {
Secure = true ,
CodeStatus = CookieCodeStatus . Decode ,
HttpOnly = true ,
Expires = new DateTime ( 2118 , 1 , 1 )
} ,
// path will be added and no decode or encode
new CookieDescriptor ( "test-cookie4" , "4%3D=" ) {
Path = "/subfolder/"
} ,
} ;
// also you can use Request.GetReferrerHost() to get referrer's host which is useful when you're developing AJAX API
return Ok ( ) . AddCookies ( cookieDescriptors , Request . GetRequestHost ( ) ) ;Puede habilitar cookies para todos los subdominios:
// domain will be ".example.org"
return Ok ( ) . AddCookies ( cookieDescriptors , "example.org" ) . EnableCookiesForAllSubdomains ( ) ;
// same, domain will be ".example.org"
return Ok ( ) . AddCookiesForAllSubdomains ( cookieDescriptors , "www.example.org" ) ;
// or even this
return Ok ( )
. AddCookiesForAllSubdomains ( cookieDescriptorsForAllSubdomains , "example.org" )
. AddCookies ( cookieDescriptorsForOneDomain , "example.com" )
. AddCookies ( cookieDescriptorsForAnotherDomainAndAllSubdomains , "www.example.net" )
. EnableCookiesForAllSubdomains ( ) ; Los navegadores tienen problemas con las galletas locales. Si especificará el dominio como localhost o incluso .localhost no se agregará a la respuesta para hacer cookies con el trabajo local para casi todos los navegadores.
Cuando llame .EnableCookiesForAllSubdomains() o use .AddCookiesForAllSubdomains(...) se aplicará la siguiente converción de dominio:
"localhost" => " "
" . localhost " => " "
"www.localhost" => ".www.localhost"
"www.localhost.ru" => ".localhost.ru"
"www.org" => ".www.org"
".www.org" => ".www.org"
"example.org" => ".example.org"
"www.example.org" => ".example.org"
".www.example.org" => ".www.example.org" Verifique AspNet.WebApi.CookiesPassthrough.Example Project.