AspNet.WebApi.CookiesPassthrough
1.0.0
WebAPIコントローラーにIHTTPACTIONRESULTにCookieを追加できます。
コンテンツ
WebAPIで応答にCookieを追加する方法はいくつかあります。ドキュメントによると、推奨される方法は、 resp.Headers.AddCookies(cookies)拡張法を使用することですが、いくつかの欠点があります。
= Charが必要です。CookieHeaderValue名前の値のペアをサポートし、そのようなコレクションはcookie-name=key1=value1&key2=value2として表示されますが、弦を通過するだけで設定しようとするとコレクションがエンコードされます。クッキーコレクションの文字列を直接合格することは、レガシークッキーベースのAPIとの統合など、クッキー値をサービスに渡す場合に役立ちます。別の方法は、 HttpContextを介してhttpresponse.cookiesにクッキーを設定することです(例を確認)が、さらに深刻な欠点があります。
HttpContextを使用することは、自己ホストでそれらを取得できないため、悪い練習です。new Thread() 。表示されている欠点を備えたIHttpActionResultの簡単なAPIを使用する方が良いです。また、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 ( ) ; ブラウザは、ローカルホストCookieに問題があります。 Domainをlocalhostまたは.localhostとして指定すると、ほとんどすべてのブラウザのLocalHostが機能するCookieを作成するために、応答にまったく追加されません。
.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プロジェクトを確認してください。