.Net versucht, Sie zu zwingen, bestimmte Standards zu befolgen, nämlich dass die Content-Type
Kopfzeile kann nur bei Anfragen angegeben werden, die einen Inhalt haben (z. B. POST
, PUT
, usw.). Daher ist, wie bereits von anderen erwähnt, die bevorzugte Methode zur Einstellung der Content-Type
Kopfzeile ist durch die HttpContent.Headers.ContentType
Eigentum.
Allerdings können bestimmte APIs (wie z. B. die LiquidFiles Api (Stand: 2016-12-19) erfordert die Einstellung der Content-Type
Kopfzeile für eine GET
Anfrage. .Net erlaubt es nicht, diesen Header in der Anfrage selbst zu setzen - auch nicht mit TryAddWithoutValidation
. Außerdem können Sie nicht eine Content
für die Anfrage - auch wenn sie null Länge hat. Die einzige Möglichkeit, dies zu umgehen, bestand darin, auf Reflexion zurückzugreifen. Der Code (für den Fall, dass ihn jemand anderes braucht) lautet
var field = typeof(System.Net.Http.Headers.HttpRequestHeaders)
.GetField("invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
?? typeof(System.Net.Http.Headers.HttpRequestHeaders)
.GetField("s_invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
if (field != null)
{
var invalidFields = (HashSet<string>)field.GetValue(null);
invalidFields.Remove("Content-Type");
}
_client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "text/xml");
Edit :
Wie in den Kommentaren erwähnt, hat dieses Feld in den verschiedenen Versionen der DLL unterschiedliche Namen. In der Quellcode auf GitHub heißt das Feld derzeit s_invalidHeaders
. Das Beispiel wurde auf Vorschlag von @David Thompson geändert, um dies zu berücksichtigen.