2012-01-11 42 views
8

コントローラ上で認証アクションを呼び出せたら、認証されたユーザの詳細をセッションに保存することができます。RestSharpセッションとASP.NETセッションでCookieコンテナを使用するにはどうすればよいですか?

しかし、RestSharpをデタッチクライアントとして使用しているため、セッション内でリクエストを保持する方法がわかりません。私は何らかの理由で認証が成功するとサーバーからキーを取得し、その後の呼び出しごとに、そのセッションに格納されているキーを確認します。

RestSharpのRestClientが将来のすべてのリクエストをCookieが正しく設定された状態で確実に送信するようにするには、サービスコール内でセッション変数を正しく取得できますか?

私はHttpFactoryを使ってCookieコンテナを見てきましたが、どこにもこのドキュメントがないようです。

+0

受け入れ答えのほかには、複雑なクッキーの管理を必要としない場合、それは簡単です、@PeterBranfornからソリューションをチェックアウト。 –

答えて

4

私はこのことを最後に行いました。 基本的には、Cookieコンテナを作成し、レスポンスのセッションCookieをCookieコンテナに追加します。これ以降のすべてのリクエストにはこのCookieが含まれます。

var sessionCookie = response.Cookies.SingleOrDefault(x => x.Name == "ASP.NET_SessionId"); 
if (sessionCookie != null) 
{ 
    _cookieJar.Add(new Cookie(sessionCookie.Name, sessionCookie.Value, sessionCookie.Path, sessionCookie.Domain)); 
} 
24

誰かが同様の問題を持っている場合は、上記の非常にシンプルな「各要求の後に私のクッキーを保存」問題のために必要とされていないことに注意してください。 上記のJaffasのアプローチは有効ですが、RestClientにCookieStoreを添付して、クッキーを自動的にに保存することができます。 専用のクッキーを保存したい場合があるので、これは誰にとっても解決策ではないことは分かっています。一方、それはあなたの人生をRESTクライアントのテストのために簡単にします! (私は容易にするためJaffas変数を使用):

 CookieContainer _cookieJar = new CookieContainer(); 
     var client = new RestClient("http://<test-server>/letteron"); //test URL 
     client.CookieContainer = _cookieJar; 
+0

"http:// localhost /"を渡してRestClientを作成しましたが、動作しませんでした(コンテナにはCookieがありますが、それ以降は渡されませんでした)。私はそれを "http://127.0.0.1/"に変更し、すべて正常に動作しました。 Jaffaのソリューションはどちらの場合でも機能しました。 –

関連する問題