2016-04-08 55 views
1

我嘗試了許多不同的方式將cookie添加到HttpContext.Current.Response而沒有運氣。瀏覽器沒有看到我添加的cookie。請幫助!將cookie設置爲HttpContext響應

這裏是我的API控制器

public IHttpActionResult Get(string username, string password) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "*"); 

    //This does not work 
    HttpCookie cookie = new HttpCookie("ACA-Cookie", "This better work!"); 
    cookie.Expires = DateTime.Now.AddDays(2); 
    cookie.Domain = Request.RequestUri.Host; 
    cookie.Path = "/"; 
    HttpContext.Current.Response.SetCookie(cookie); 

    //This does not work 
    var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString()); 
    HttpContext.Current.Response.Cookies.Add(cookie); 
    return Ok(HttpStatusCode.OK); 
} 

回答

0

在我的場景中,我使用了Angular JS和Web API。但是,我使用ASP.Net MVC登錄來驗證用戶。

基本上,用戶在ASP.Net MVC頁面登錄,該頁面使用ASP.Net標識。一旦認證成功,我重定向到MVC SPA(單頁應用程序);它每次請求Web API時都會維護Authenticated Cookie。

如果你想使用沒有MVC的純Web API調用,我建議你看看基於令牌的授權這比從Web API響應cookie更容易和更好。

0

記住的WebAPI是基於REST(無狀態)和餅乾,以保持狀態的方式。這兩個概念實際上是相互矛盾的。如果您想使用cookie,您可以考慮使用ASP.net MVC,因爲您仍然可以在更適合狀態的框架中返回序列化數據。

+0

這有助於很多! 您是否建議僅使用mvc控制器來爲登錄設置剩餘請求的cookie? –

+0

在我的公司,我們用.Net和Rest基本認證開發了web api。憑證在HTTP請求標頭中傳遞。 – derloopkat

+0

與derloopkat同意,憑證也可以在請求標頭中傳遞給WebAPI控制器。但是,使用REST時,通常需要對每個請求進行身份驗證(以保持無狀態)。 – Luke