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;
}
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\"" },
},
},
},
};
Ich habe die Antwort auf meine Frage gefunden.
client.DefaultRequestHeaders.Add("X-Version","1");
Das sollte Ihrer Anfrage einen benutzerdefinierten Header hinzufügen
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;
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.