2013-11-20 3 views
0

asp.net web api로 작은 예제를 만들었습니다. 인증 용 API를 만듭니다. 사용자가 성공적으로 로그인 할 때 쿠키 응답 헤더를 사용하려고합니다. 하지만 다음 요청에서 헤더에 쿠키를 찾을 수 없습니다. 아무도 나를 도울 수 있습니까? 고마워요 !!!웹 API - authen 요청으로 쿠키를 설정하는 방법

 if (repository.CheckValidUser(user)) 
     { 
      var resp = new HttpResponseMessage(); 

      var cookie = new CookieHeaderValue("Authorization-Token", RSAClass.Encrypt(user.Username)); 
      cookie.Expires = DateTimeOffset.Now.AddDays(1); 
      cookie.Domain = Request.RequestUri.Host; 
      cookie.Path = "/"; 

      resp.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 
      return resp; 
     } 
     else 
     { 
      throw new HttpResponseException(new HttpResponseMessage() { StatusCode = HttpStatusCode.Unauthorized, Content = new StringContent("Invalid user name or password.") }); 
     } 

난 exemple를 들어, 당신은 쿠키를 유지하기 위해 DelegatingHanlder을 만들어야합니다

authen request

next request

답변

2

내 요청에 대한 몇 가지 사진이 :

public class MyCookieHandle : DelegatingHandler 
{ 
    async protected override Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     // 
     // Other code for retrieve user information 
     // 
     var cookie = request.Headers.GetCookies("Authorization-Token").FirstOrDefault(); 

     if (cookie == null) 
     { 
      cookie = new CookieHeaderValue("Authorization-Token", RSAClass.Encrypt(user.Username)); 
      cookie.Expires = DateTimeOffset.Now.AddDays(1); 
      cookie.Domain = request.RequestUri.Host; 
      cookie.Path = "/"; 
     } 

     HttpResponseMessage resp = await base.SendAsync(request, cancellationToken); 
     resp.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 

     return resp; 
    } 
} 

자세한 내용은있다 여기 : HTTP Cookies in ASP.NET Web API

+0

와우, 나는 그것을 시도 할 것이다. 정말 고맙습니다. 나는이 문제에 2 시간을 낭비한다. 고맙습니다. – PhuongTT

+0

하지만 컨트롤러에서 set-cookie 헤더를 사용할 수없는 이유는 무엇입니까? 이걸 설명 할 수 있니? 고맙습니다! – PhuongTT

+0

당신은 할 수는 있지만, 요청을 위해 모든 쿠키를 유지해야합니다. 그렇지 않으면 HTTP 요청/응답을 직접 처리하는 Wep API를 가지고 있기 때문에 손실 될 것입니다. – Fals

관련 문제