は、我々は次のコードを持っていた: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
になりました。
私はIFlurlRequest
がClient
性質を持っていることに気づいたので、私はあることを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];
これはもう一度動作しますが、私はこれを正しい方法で実行しているかどうかはわかりません。どんなフィードバックも高く評価されます。
素晴らしいと思いました。 'Cookies'コレクションは辞書なので、' cli.Cookies [0] 'を' cli.Cookies.First()。Value'に変更しなければなりませんでした。クッキーの名前を使ってインデックスを作成することもできましたが、クッキー名が変更された場合にはこの別のルートに行くと考えました。 –
おっと、良いキャッチ。更新しました。 –