Добавьте ссылку на 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"));