Позволяет добавлять файлы cookie для ihttpactionResult в контроллерах WebAPI.
Содержимое
Есть несколько способов добавить файлы cookie в ответ в Webapi. Рекомендуемый способ, согласно документам, состоит в том, чтобы использовать метод расширения resp.Headers.AddCookies(cookies) , но есть некоторые недостатки:
= char в значении cookie.CookieHeaderValue поддерживает пары именных значений, и такие коллекции будут представлены как cookie-name=key1=value1&key2=value2 , но коллекция будет кодирована, если вы попытаетесь установить его с помощью просто передачи строки. Прохождение строк сбора cookie непосредственно полезно для случаев, когда вы передаете ценности cookie с помощью услуг, например, интеграция с устаревшими API на основе печенья. Другой способ - установить файлы cookie на httpresponse.cookies через HttpContext (проверка примера), но есть еще более серьезные недостатки:
HttpContext в Webapi - плохая практика, потому что вы не можете получить их в самостоятельном хозяйстве.new Thread() . Лучше иметь простой API для IHttpActionResult без описания недостатков. Также хорошо иметь поддержку Localhost или «включить эти файлы cookie для всех субдоменов».
Вы можете установить пакет aspnet.webapi.cookiespassthrough через 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 ( ) ) ;Вы можете включить файлы cookie для всех субдоменов:
// 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 ( ) ; У браузеров есть проблемы с местными куки -файлами. Если вы указате домен как localhost или даже .localhost он вообще не будет добавлен в ответ, чтобы сделать файлы cookie с работой Localhost почти для всех браузеров.
Когда вы звоните .EnableCookiesForAllSubdomains() или используете .AddCookiesForAllSubdomains(...) Следующее преобразование домена будет применяться:
"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" Проверьте AspNet.WebApi.CookiesPassthrough.Example Project.