web-dev-qa-db-fra.com

En-tête personnalisé pour la requête Httpclient

Comment puis-je ajouter un en-tête personnalisé à une demande HttpClient. J'utilise la méthode PostAsJsonAsync pour publier le json. L'en-tête personnalisé que j'aurais besoin d'être ajouté est 

"X-Version: 1"

C'est ce que j'ai fait jusqu'à présent:

using (var client = new HttpClient()) {
    client.BaseAddress = new Uri("https://api.clickatell.com/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var response = client.PostAsJsonAsync("rest/message", svm).Result;
}
79
Libin Joseph
var request = new HttpRequestMessage {
    RequestUri = new Uri(EnvironmentSetup.BaseAddress + "Folder"),
    Method = HttpMethod.Post,
    Headers = {
        { HttpRequestHeader.Authorization.ToString(), "Basic " + EnvironmentSetup.GetAuthToken() },
        { HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },
    },
    Content = new MultipartContent {
        new ObjectContent<FolderWithDocuments>(new FolderWithDocuments {
            Status = FolderStatus.Draft,
            Users = new List<User> { EnvironmentSetup.User1, EnvironmentSetup.User2 },
        }, new JsonMediaTypeFormatter(), "application/json"),
        new ByteArrayContent(ResourceHelper.ReadResourceToByteArray("blank.pdf")) {
            Headers = {
                { "Content-Type", "application/Executable" },
                { "Content-Disposition", "form-data; filename=\"test.pdf\"" },
            },
        },
    },
};
34
Anubis

J'ai trouvé la réponse à ma question.

client.DefaultRequestHeaders.Add("X-Version","1");

Cela devrait ajouter un en-tête personnalisé à votre demande

136
Libin Joseph

Voici une réponse basée sur celle d'Anubis (qui est une meilleure approche car elle ne modifie pas les en-têtes pour chaque requête) mais qui est plus équivalente au code de la question initiale:

using Newtonsoft.Json;
...

    var client = new HttpClient();
    var httpRequestMessage = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri("https://api.clickatell.com/rest/message"),
            Headers = { 
                { HttpRequestHeader.Authorization.ToString(), "Bearer xxxxxxxxxxxxxxxxxxxx" },
                { HttpRequestHeader.Access.ToString(), "application/json" },
                { "X-Version", "1" }
            },
            Content = new StringContent(JsonConvert.SerializeObject(svm))
        };

    var response = client.SendAsync(httpRequestMessage).Result;
5
Chris Peacock

Il existe une propriété Headers dans la classe HttpRequestMessage. Vous pouvez y ajouter des en-têtes personnalisés qui seront envoyés avec chaque requête HTTP. DefaultRequestHeaders dans la classe HttpClient, d'autre part, définit les en-têtes à envoyer avec chaque demande envoyée à l'aide de cet objet client, d'où le nom Par défaut En-têtes de demande. 

J'espère que cela rend les choses plus claires, au moins pour quelqu'un qui verra cette réponse à l'avenir.

0
BobTheBuilder