c# asp.net - ¿Cómo configuro una cookie en HttpRequestMessage de HttpClient?





web api (3)


A continuación, le mostramos cómo puede establecer un valor de cookie personalizado para la solicitud:

var baseAddress = new Uri("http://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
    var content = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("foo", "bar"),
        new KeyValuePair<string, string>("baz", "bazinga"),
    });
    cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
    var result = client.PostAsync("/test", content).Result;
    result.EnsureSuccessStatusCode();
}

Estoy tratando de utilizar el HttpClient la API web para hacer una publicación en un punto final que requiere iniciar sesión en forma de una cookie HTTP que identifica una cuenta (esto es solo algo que está #ifdef 'ed fuera de la versión de lanzamiento).

¿Cómo agrego una cookie al HttpRequestMessage ?




La respuesta aceptada es la forma correcta de hacerlo en la mayoría de los casos. Sin embargo, hay algunas situaciones en las que desea establecer manualmente el encabezado de la cookie. Normalmente, si configura un encabezado "Cookie", se ignora, pero eso se debe a que HttpClientHandler utiliza de manera predeterminada su propiedad CookieContainer para las cookies. Si lo desactiva y establece UseCookies en false , puede establecer los encabezados de las cookies de forma manual y aparecerán en la solicitud, por ejemplo

var baseAddress = new Uri("http://example.com");
using (var handler = new HttpClientHandler { UseCookies = false })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
    var message = new HttpRequestMessage(HttpMethod.Get, "/test");
    message.Headers.Add("Cookie", "cookie1=value1; cookie2=value2");
    var result = await client.SendAsync(message);
    result.EnsureSuccessStatusCode();
}



Como ejemplo, cree un archivo JSON, params.json, y agregue este contenido:

[
    {
        "environment": "Devel",
        "description": "Machine for test, please do not delete!"
    }
]

A continuación, ejecute este comando:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server




c# rest asp.net-mvc-4 asp.net-web-api