2012-01-11 19 views
8

Me gustaría poder invocar una acción de autenticación en un controlador y, si tiene éxito, almacenar los detalles del usuario autenticado en la sesión.¿Cómo uso el contenedor de cookies con las sesiones de RestSharp y ASP.NET?

Sin embargo, no estoy seguro de cómo mantener las solicitudes dentro de la sesión ya que estoy utilizando RestSharp como cliente independiente. Necesito de alguna manera recuperar una clave del servidor con la autorización exitosa y luego para cada llamada futura, verificar la clave con la almacenada en la sesión.

¿Cómo me aseguro de que RestClient en RestSharp envíe todas las solicitudes futuras con la cookie configurada correctamente para que dentro de las llamadas al servicio, la variable de sesión pueda recuperarse correctamente?

He estado buscando en el contenedor de cookies con HttpFactory, pero no parece haber documentación sobre esto en ninguna parte.

+0

Además de la caja respuesta aceptada la solución de @PeterBranforn, es más simple si usted no necesita la gestión de cookies compleja. –

Respuesta

4

Lo resolví al final. Básicamente, cree un contenedor de cookies y luego agregue la cookie de sesión desde la respuesta al contenedor de cookies. Todas las solicitudes futuras contendrán esta 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

Si alguien tiene un problema similar, tenga en cuenta que lo anterior no es del todo necesario para un simple problema de "almacenar mis cookies después de cada solicitud". El enfoque anterior de Jaffas funciona, pero simplemente puede conectar una CookieStore a su RestClient y guardar las cookies automáticamente. Sé que esto no es una solución para todos, ya que es posible que desee almacenar cookies dedicadas solamente. ¡Por otro lado, hace que su vida sea más fácil para probar un cliente REST! (I utilizaron las variables jaffas para facilidad):

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

Creé RestClient pasando "http: // localhost /" y no funcionó (el contenedor obtuvo la cookie, pero no fue pasada). Lo cambié a "http: //127.0.0.1/" y todo funcionó bien. La solución de Jaffa funcionó en ambos casos. –

Cuestiones relacionadas