it-swarm.com.de

Angepasster Header an Httpclient-Anforderung

Wie füge ich einer HttpClient-Anforderung einen benutzerdefinierten Header hinzu? Ich verwende PostAsJsonAsync-Methode, um den Json zu posten. Der benutzerdefinierte Header, den ich hinzufügen müsste, ist 

"X-Version: 1"

Das habe ich bisher gemacht:

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

Ich habe die Antwort auf meine Frage gefunden.

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

Das sollte Ihrer Anfrage einen benutzerdefinierten Header hinzufügen

136
Libin Joseph

Hier ist eine Antwort auf der Grundlage von Anubis (was eine bessere Vorgehensweise ist, da die Kopfzeilen nicht für jede Anforderung geändert werden), die jedoch dem Code in der ursprünglichen Frage mehr entspricht:

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

In der Klasse Headers gibt es eine HttpRequestMessage-Eigenschaft. Sie können dort benutzerdefinierte Header hinzufügen, die mit jeder HTTP-Anfrage gesendet werden. Die Variable DefaultRequestHeaders in der Klasse HttpClient setzt dagegen Header, die mit jeder mit diesem Client-Objekt gesendeten Anforderung gesendet werden sollen, daher der Name Default Request Headers. 

Ich hoffe, das macht die Dinge klarer, zumindest für jemanden, der diese Antwort in der Zukunft sieht.

0
BobTheBuilder