2016-04-08 128 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