web-dev-qa-db-ja.com

HttpReponseMessageに応答Cookieを設定するにはどうすればよいですか?

Web APIでデモログインサービスを作成し、応答にCookieを設定する必要があります。それ、どうやったら出来るの?または、承認を行うより良い方法はありますか?

18
Tomas Jansson

System.Net.Http.Formatting.dllへの参照を追加し、AddCookiesクラスで定義されているHttpResponseHeadersExtensions拡張メソッドを使用します。

このアプローチを説明するブログ投稿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());
}

次に、次のような応答にCookieを含めることができます。

HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));
24
Andrew Arnott

HttpContext.Current.Response.CookiesコレクションにCookieを追加できます。

    var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
    HttpContext.Current.Response.Cookies.Add(cookie);
7
Maurice