Как мне установить файл cookie ответа на HttpReponseMessage? - PullRequest
17 голосов
/ 20 марта 2012

Я хотел бы создать демо-сервис входа в систему в веб-интерфейсе, и мне нужно установить cookie в ответе. Как я могу это сделать? Или есть ли лучший способ сделать авторизацию?

Ответы [ 2 ]

24 голосов
/ 14 января 2013

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

Вы можете добавить cookie в коллекцию HttpContext.Current.Response.Cookies.

    var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
    HttpContext.Current.Response.Cookies.Add(cookie);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...