18

我想在 web api 中创建一个演示登录服务,并且需要在响应上设置一个 cookie。我怎么做?或者有没有更好的授权方式?

4

2 回答 2

26

添加对类中定义的扩展方法的引用System.Net.Http.Formatting.dll并使用它。AddCookiesHttpResponseHeadersExtensions

这是描述这种方法的博客文章MSDN 主题

如果该程序集不适合您,这是我在此之前的旧答案:

较旧的答案如下

我更喜欢一种保持在HttpResponseMessage不渗入 HttpContext 范围内的方法,这种方法不是可单元测试的,并且并不总是适用于主机:

/// <summary>
/// Adds a Set-Cookie HTTP header for the specified cookie.
/// WARNING: support for cookie properties is currently VERY LIMITED.
/// </summary>
internal static void SetCookie(this HttpResponseHeaders headers, Cookie cookie) {
    Requires.NotNull(headers, "headers");
    Requires.NotNull(cookie, "cookie");

    var cookieBuilder = new StringBuilder(HttpUtility.UrlEncode(cookie.Name) + "=" + HttpUtility.UrlEncode(cookie.Value));
    if (cookie.HttpOnly) {
        cookieBuilder.Append("; HttpOnly");
    }

    if (cookie.Secure) {
        cookieBuilder.Append("; Secure");
    }

    headers.Add("Set-Cookie", cookieBuilder.ToString());
}

Then you can include a cookie in the response like this:

HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));
于 2013-01-14T05:05:59.863 回答
9

您可以将 cookie 添加到 HttpContext.Current.Response.Cookies 集合中。

    var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
    HttpContext.Current.Response.Cookies.Add(cookie);
于 2012-03-20T19:44:01.060 回答