Ermöglicht Ihnen, Cookies für IHTTPactionResult in WebAPI -Controllern hinzuzufügen.
Inhalt
Es gibt verschiedene Möglichkeiten, der Antwort in Webapi Cookies hinzuzufügen. Die empfohlene Art und Weise, wie die Dokumente nach Angaben der Dokumente resp.Headers.AddCookies(cookies) Erweiterungsmethode verwenden, gibt es jedoch einige Nachteile:
= char in einem Cookie -Wert.CookieHeaderValue unterstützt Namenswertepaare und solche Sammlungen werden als cookie-name=key1=value1&key2=value2 dargestellt. Die Sammlung wird jedoch codiert, wenn Sie versuchen, sie über die String-String einzustellen. Das direkte Bestehen von Cookie Collection-Zeichenfolgen ist direkt für Fälle nützlich, wenn Sie Cookie-Werte durch Dienste übergeben, z. B. Integration mit älterem Cookie-basierten APIs. Eine andere Möglichkeit besteht darin, Cookies auf httpresponse.cookies über HttpContext (prüft) festzulegen, aber es gibt noch schwerwiegendere Nachteile:
HttpContext in WebAPI ist eine schlechte Praxis, da Sie sie nicht in Self Host bekommen können.new Thread() . Besser, um eine einfache API für IHttpActionResult mit beschriebenen Nachteilen zu haben. Auch gut, Localhost-Unterstützung zu haben oder diese Cookies für alle Subdomains zu aktivieren.
Sie können ASPNET.Webapi.Cookiespasshrough -Paket über Nuget installieren.
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 ( ) ) ;Sie können Cookies für alle Subdomains aktivieren:
// 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 ( ) ; Browser haben Probleme mit lokalen Keksen. Wenn Sie Domain als localhost oder sogar .localhost angeben, wird sie der Antwort überhaupt nicht hinzugefügt, um Cookies mit Localhost für fast alle Browser zu machen.
Wenn Sie .EnableCookiesForAllSubdomains() anrufen oder .AddCookiesForAllSubdomains(...) Die folgende Domänenkonvertion wird angewendet:
"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" Überprüfen Sie AspNet.WebApi.CookiesPassthrough.Example -Projekt.