Comment utiliser le conteneur de cookies avec RestSharp et ASP.NET des séances?

j'aimerais pouvoir appeler une action d'authentification sur un contrôleur et si elle réussit, stocker les détails de l'utilisateur authentifié dans la session.

cependant, je ne sais pas comment garder les requêtes à l'intérieur de la session car J'utilise RestSharp en tant que client détaché. J'ai besoin de récupérer une clé du serveur sur autorisation réussie et ensuite pour chaque appel futur, vérifiez la clé avec celle stockée dans la session.

Comment puis-je assurer le repos dans les Repossharp envoie toutes les requêtes futures avec le cookie correctement défini de sorte que dans les appels de service, la variable de session peut être récupérée correctement?

j'ai regardé le conteneur de cookies avec HttpFactory mais il ne semble pas y avoir de documentation à ce sujet.

10
demandé sur jaffa 2012-01-11 20:59:44

2 réponses

si quelqu'un a un problème similaire, s'il vous plaît noter que ce qui précède n'est pas tout à fait nécessaire pour un simple "stocker mes cookies après chaque demande" problème. L'approche Jaffas ci-dessus fonctionne, mais vous pouvez simplement attacher un CookieStore à votre RestClient et faire stocker les cookies automatiquement. Je sais que ce n'est pas une solution pour tout le monde, car vous pourriez vouloir stocker dédié cookies seulement. D'un autre côté, il rend votre vie plus facile pour tester un client de repos! (Je utilisé Jaffas variables pour plus de facilité):

        CookieContainer _cookieJar = new CookieContainer();
        var client = new RestClient("http://<test-server>/letteron"); //test URL
        client.CookieContainer = _cookieJar;
28
répondu Peter Branforn 2012-05-13 10:31:28

j'ai travaillé cela en fin de compte. Essentiellement créer un conteneur cookie, puis ajouter le cookie de session à partir de la réponse dans le conteneur cookie. Toutes les demandes futures contiendront alors ce 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));
 }
6
répondu jaffa 2012-01-25 11:38:11