2017-11-14 3 views
0

は、我々は次のコードを持っていた:v2.0.1のラインにアップグレードした後Flurl.Http v2.0.1の中リクエストからクッキーを取り戻す

1. var cookieJar = new CookieContainer(); 
2. var url = baseUrl.AppendPathSegment("api/auth/login"); 
3. var client = url.EnableCookies(); 
4. ((HttpClientHandler)client.HttpMessageHandler).CookieContainer = cookieJar; 
5. var result = await client.PostJsonAsync(new { UserName = userName, Password = password }); 
6. var cookies = cookieJar.GetCookies(new Uri(baseUrl)); 
7. _cookie = cookies[0]; 

を4もはやコンパイルclient理由リリースノートごとにIFlurlRequestになりました。もうIFlurlClientになりました。

私はIFlurlRequestClient性質を持っていることに気づいたので、私はあることを4行目を変更:

は、このインスタンスがあります。今コンパイルしますが、例外InvalidOperationExceptionと、実行時に失敗した

4. ((HttpClientHandler)client.Client.HttpMessageHandler).CookieContainer = cookieJar; 

すでに1つ以上の要求を開始しています。プロパティは、最初のリクエストを送信する前にのみ変更できます。

私は、元のHttpClientを積極的に再利用していると想定しています。私は3と4の間に新しいFlurlClientを作成して、インスタンスがリクエストを開始できないようにするための行を追加しました。

1. var cookieJar = new CookieContainer(); 
2. var url = baseUrl.AppendPathSegment("api/auth/login"); 
3. var request = url.EnableCookies(); 
3.5 request.Client = new FlurlClient(); 
4. ((HttpClientHandler)request.Client.HttpMessageHandler).CookieContainer = cookieJar; 
5. var result = client.PostJsonAsync(new { UserName = userName, Password = password }).Result; 
6. var cookies = cookieJar.GetCookies(new Uri(baseUrl)); 
7. _cookie = cookies[0]; 

これはもう一度動作しますが、私はこれを正しい方法で実行しているかどうかはわかりません。どんなフィードバックも高く評価されます。

答えて

1

CookieContainerを明示的に管理する必要はありません。 Flurlはクッキーの操作をもっと簡単にします。

FlurlClientを明示的に作成しないと、通常はHttpClientインスタンスをできるだけ再利用したいと考えていますが、複数の呼び出しでCookieを保持する場合は、おそらく自分でFlurlClientを管理したい場合は、複数のスレッドが同じコレクションのCookieを読み書きする可能性があります。

まだかなり簡単です。私はあなたの全体の例をこれに減らすことができると思います:

using (var cli = new FlurlClient(baseUrl).EnableCookies()) { 
    await cli.Request("api/auth/login").PostJsonAsync(new { 
     UserName = userName, 
     Password = password }); 
    _cookie = cli.Cookies.First().Value; 
} 
+0

素晴らしいと思いました。 'Cookies'コレクションは辞書なので、' cli.Cookies [0] 'を' cli.Cookies.First()。Value'に変更しなければなりませんでした。クッキーの名前を使ってインデックスを作成することもできましたが、クッキー名が変更された場合にはこの別のルートに行くと考えました。 –

+0

おっと、良いキャッチ。更新しました。 –

関連する問題