2012-01-11 1 views
8

컨트롤러에서 인증 작업을 호출 할 수 있고 성공하면 인증 된 사용자 세부 정보를 세션에 저장하고 싶습니다.RestSharp 및 ASP.NET 세션에서 쿠키 컨테이너는 어떻게 사용합니까?

그러나 RestSharp를 분리 된 클라이언트로 사용하고 있기 때문에 세션 내에서 요청을 유지하는 방법을 잘 모르겠습니다. 성공적인 인증을 위해 서버에서 키를 얻은 다음 향후 호출 할 때마다 세션에 저장된 키로 키를 확인해야합니다.

RestSharp의 RestClient가 서비스 호출 내에서 쿠키가 올바르게 설정된 상태로 향후 모든 요청을 보내도록 보장하려면 어떻게해야합니까? 세션 변수를 올바르게 검색 할 수 있습니까?

HttpFactory가있는 쿠키 컨테이너를보고 있었지만 아무데도이 설명서가없는 것 같습니다.

+0

: 은 (내가 Jaffas 용이성에 대한 변수를 사용). –

답변

4

나는 이것을 결국 해결했다. 기본적으로 쿠키 컨테이너를 만든 다음 응답의 세션 쿠키를 쿠키 컨테이너에 추가합니다. 이후 모든 요청에는이 쿠키가 포함됩니다.

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 클라이언트를 테스트하기위한 당신의 삶을 더 편하게 만듭니다! 복잡한 쿠키 관리가 필요하지 않은 경우 @PeterBranforn의 솔루션, 그것은 간단 허용 대답 체크 아웃 외에도

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

"http : // localhost /"를 전달하는 RestClient를 만들었고 작동하지 않았습니다 (컨테이너에 쿠키가 있지만 이후에 전달되지 않았습니다). 나는 그것을 "http : //127.0.0.1/"로 바꾸 었으며 모두 잘 돌아갔다. Jaffa의 솔루션은 두 경우 모두에서 작동했습니다. –