2013-11-20 38 views
0

我已經用asp.net web api構建了一個小例子。我創建了一個用於身份驗證的API。當用戶登錄成功時,我嘗試使用set-cookie響應標頭。但在下一個請求中,我無法在標頭中找到cookie。有誰能夠幫助我?非常感謝!!!Web API - 如何使用驗證請求設置cookie

 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.") }); 
     } 

我對自己的要求有些照片

authen request

next request

回答

2

您應該創建一個DelegatingHanlder堅持餅乾,用於爲例:

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

你可以,但你必須堅持每個cookie的請求,否則將會丟失,因爲你正在處理直接處理HTTP Resquest/Response的Wep API – Fals

相關問題