Custom header to HttpClient request
var request = new HttpRequestMessage {
RequestUri = new Uri("[your request url string]"),
Method = HttpMethod.Post,
Headers = {
{ "X-Version", "1" } // HERE IS HOW TO ADD HEADERS,
{ HttpRequestHeader.Authorization.ToString(), "[your authorization token]" },
{ HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },//use this content type if you want to send more than one content type
},
Content = new MultipartContent { // Just example of request sending multipart request
new ObjectContent<[YOUR JSON OBJECT TYPE]>(
new [YOUR JSON OBJECT TYPE INSTANCE](...){...},
new JsonMediaTypeFormatter(),
"application/json"), // this will add 'Content-Type' header for the first part of request
new ByteArrayContent([BINARY DATA]) {
Headers = { // this will add headers for the second part of request
{ "Content-Type", "application/Executable" },
{ "Content-Disposition", "form-data; filename=\"test.pdf\"" },
},
},
},
};
How to add a custom header to HttpClient()?
Try this:
client.DefaultRequestHeaders.Add("X-Version","1");
Custom header in HttpClient POST request not working
In addition to haldo's answer,
In your code, you are adding your Acs-Api-Key
header as and Authorization header, meaning it ends up looking like Authorization: Acs-Api-Key (key)
rather than Acs-Api-Key: (key)
which is what you have in PostMan.
Instead of adding it as an Authorization header, just add it as a regular header.
client.DefaultRequestHeaders.Add("Acs-Api-Key","(key)");
Also something else that may cause issues is that you aren't wrapping your content in the "source" object like you are in PostMan. There are a couple ways of doing this
The first would be to simply wrap it in it's string format:
stringPayload = $"\"source\":{{{stringPayload}}}"
Or you can do it before you serialize by making your own object instead of having a Dictionary
var content = new PayloadObject(new Source("upload", "testdoc"));
var stringPayload = JsonConvert.SerializeObject(content);
// Send the request
class PayloadObject{
Source source {get; set;}
PayloadObject(Source source){
this.source = source;
}
}
class Source{
string type {get; set;}
string displayName {get; set;}
Source(string type, string displayName){
this.type = type;
this.displayName = displayName;
}
}
Adding headers when using httpClient.GetAsync
When using GetAsync with the HttpClient you can add the authorization headers like so:
httpClient.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer", "Your Oauth token");
This does add the authorization header for the lifetime of the HttpClient so is useful if you are hitting one site where the authorization header doesn't change.
Here is an detailed SO answer
Adding Http Headers to HttpClient
Create a HttpRequestMessage
, set the Method to GET
, set your headers and then use SendAsync
instead of GetAsync
.
var client = new HttpClient();
var request = new HttpRequestMessage() {
RequestUri = new Uri("http://www.someURI.com"),
Method = HttpMethod.Get,
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
var task = client.SendAsync(request)
.ContinueWith((taskwithmsg) =>
{
var response = taskwithmsg.Result;
var jsonTask = response.Content.ReadAsAsync<JsonObject>();
jsonTask.Wait();
var jsonObject = jsonTask.Result;
});
task.Wait();
Related Topics
How to Get the Child Windows of a Window Given Its Hwnd
Find Index of a Value in an Array
Appsettings Get Value from .Config File
How to "Flatten" or "Index" 3D-Array in 1D Array
Nullable<Int> VS. Int? - Is There Any Difference
How to Restart a Wpf Application
C# Console Receive Input with Pipe
What Advantages of Extension Methods Have You Found
On Postback, How to Check Which Control Cause Postback in Page_Init Event
How to Sort an Observable Collection
"Updatesourcetrigger=Propertychanged" Equivalent for a Windows Phone 7 Textbox
Question Mark and Colon in Statement. What Does It Mean
C# Optional Parameters on Overridden Methods
Compare Version Numbers Without Using Split Function
Suppressing "Is Never Used" and "Is Never Assigned To" Warnings in C#
C# - Cannot Implicitly Convert Type List<Product> to List<Iproduct>