在回复后WebAPI中发送Cookie

时间:2013-09-23 02:10:14

标签: c# http post cookies asp.net-web-api

我正在尝试在我验证他之后向用户发送cookie。一切都很完美,响应正在我的代码中构建,但即使在客户端得到响应之后,浏览器中也没有保存cookie(通过chrome F12检查它 - >资源)。

注意:我可以看到使用我的Cookie在fiddler中发送的响应

enter image description here

我想知道出了什么问题以及浏览器为什么不保存cookie。

以下是处理Post请求的WebAPI函数:

public HttpResponseMessage Post([FromBody]User user)
        {
            IDal dal = new ProGamersDal();
            var currentUser = dal.GetUser(user.Username, user.Password);

            if (currentUser == null)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Bad request.");
            }
            else
            {
                var res = new HttpResponseMessage();
                var cookie = new CookieHeaderValue("user",JsonConvert.SerializeObject(new ReponseUser(){username = currentUser.Username, role = currentUser.Role}));
                cookie.Expires = DateTimeOffset.Now.AddDays(1);
                cookie.Domain = Request.RequestUri.Host;
                cookie.Path = "/";

                res.Headers.AddCookies(new CookieHeaderValue[] { cookie });
                return res;
            }
        }

1 个答案:

答案 0 :(得分:4)

我发现了问题是什么,因为在Firefox中保存了cookie。

在Chrome中,您无法使用“localhost”域设置Cookie,因为它被视为无效域(有效域中必须包含两个点) - 因此Cookie无效。< / p>

为了解决这个问题,如果是localhost,你应该:

  1. 将域设置为null。
  2. 将域设置为''(空)
  3. 将域名设为“127.0.0.1”
  4. 这是我的代码中的修复:

    cookie.Domain = Request.RequestUri.Host == "localhost" ? null : Request.RequestUri.Host;