2012-03-20 4 views
15

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

+0

Не похоже, что вы можете установить cookie на HttpResponseMessage. Посмотрите эту тему, может быть, это поможет http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service –

ответ

22

Добавить ссылку на System.Net.Http.Formatting.dll и использовать метод AddCookies расширения, определенный в HttpResponseHeadersExtensions классе.

Здесь a blog post describing this approach и MSDN topic.

Если сборка не вариант для вас, вот мой старший ответ от до этого был вариант:

Пожилым Ответ следует

Я предпочитаю подход, который остается в пределах области 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()); 
} 

Затем вы можете включить кук в ответ например:

HttpResponseMessage response; 
response.Headers.SetCookie(new Cookie("name", "value")); 
+0

Согласен, это выглядит как лучшая альтернатива. Изменены принятые ответы для руководства пользователями в будущем. –

+0

Возможно ли, что это уже не ответ? Единственный способ, которым я нашел эту DLL, - это Nuget, и он явно указывает, что это для WebApi.Client выше 2.0 и ниже 2.1, поэтому этот ответ был для WebApi 2. Теперь мы с ASP.NET 4 и I больше не может найти эту dll. –

+0

@ IsaacLlopis Я предполагаю, что они перенесли его из расширения dll в ядро. –

6

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

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

Спасибо, что я хотел и должен был подумать о себе. Но на самом деле ожидалось, что это будет доступно на 'HttpResponseMessage'. –

+0

Это было мое первое предположение, но по какой-то причине это не так. Это, конечно, было бы лучше для тестовых возможностей. – Maurice

+21

Этот ответ противоречит способу использования WebAPI. Вы не должны ссылаться на HttpContext.Current из WebAPI, поскольку это не будет существовать, если вы сами принимаете. В бета-битх отсутствовало множество вспомогательных утилит вроде этого. RC добавил метод расширения AddCookies() в HttpResponseMessage.Headers, который вы должны использовать вместо этого. – Andrew

Смежные вопросы