Permite adicionar cookies para ihttpactionResult em controladores webapi.
Conteúdo
Existem várias maneiras de adicionar cookies à resposta no webapi. A maneira recomendada, de acordo com os documentos, é usar o método de extensão resp.Headers.AddCookies(cookies) , mas existem algumas desvantagens:
= char em um valor de cookie.CookieHeaderValue suporta pares de nomes-valores e essas coleções serão apresentadas como cookie-name=key1=value1&key2=value2 , mas a coleção será codificada se você tentar defini-lo por apenas passando a sequência. Passando strings de coleção de cookies diretamente é útil para casos quando você passa valores de cookies através de serviços, por exemplo, integração com APIs baseadas em biscoitos legados. Outra maneira é definir cookies no httproponse.cookies via HttpContext (exemplo de verificação), mas há desvantagens ainda mais graves:
HttpContext no webapi é uma prática ruim, porque você não pode obtê -los em auto -host.new Thread() . Melhor ter API simples para IHttpActionResult sem desvantagens descritas. Também é bom ter suporte para localhostes ou "Ativar esses cookies para todos os subdomínios".
Você pode instalar o pacote ASPNET.WEBAPI.COOKIESPASSTHUROGH via 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 ( ) ) ;Você pode ativar cookies para todos os subdomínios:
// 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 ( ) ; Navegadores têm problemas com biscoitos de localhost. Se você especificar o domínio como localhost ou mesmo .localhost , ele não será adicionado à resposta para fazer biscoitos com trabalho de localhost para quase todos os navegadores.
Quando você chama .EnableCookiesForAllSubdomains() ou usa .AddCookiesForAllSubdomains(...) A seguinte conversão de domínio será aplicada:
"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.