HttpClient continue de recevoir de mauvaises demande
Je vais avoir un moment difficile la résolution de mon Mauvais Demander des réponses à partir d'une api REST quand je suis en création d'un client à l'aide de C#. J'ai testé le RESTE de l'api à l'aide de Fiddler 2 et l'exécution par là, mais quand je crée la même chose par programmation-je obtenir 400 de réponse. Voici mon Violoniste compositeur test:
URL:
https://<third-party-rest-client>/api/v2/job
Voici mes en-Têtes
User-Agent: Fiddler
Content-Type: application/json
Accept: application/json
icSessionId: PomCSBCVU4VgXCJ5
Content-Length: 123
Et voici le corps je t'envoie une requête POST avec
{
"@type": "job",
"taskId":"0000G20G000000000002",
"taskName":"TestReplication",
"taskType":"DRS",
"callbackURL":""
}
Ce POST revient avec une réponse 200 et un corps de réponse, ce qui est parfait, mais quand j'essaie de simuler la même chose en C# avec ce code:
public JobResponse RunJob(JobRequest jobRequest)
{
try
{
client = new HttpClient();
client.BaseAddress = new Uri(loggedUser.serverUrl + "/");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("icSessionId", icSessionId);
string message = JsonConvert.SerializeObject(jobRequest);
message = message.Insert(1, "\"@type\": \"job\",");
Console.WriteLine(message);
var response = client.PostAsJsonAsync("api/v2/job", message).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<JobResponse>().Result;
}
else
{
var result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return null;
}
Cela revient comme un 400. Quelqu'un a une idée quel est le problème avec mon code?
L'API accepter Majuscules JSON valeurs? Le HttpClient envoie majuscules fieldnames par défaut.
vous n'avez pas besoin de sérialiser l'objet. Vous pouvez passer directement à
client.PostAsJsonAsync
. Aussi, sur votre loggedUser.serverUrl
avez-vous quelque chose comme "http://servername"
. Vous pouvez voir quelques exemples dans le asp.net/web-api/overview/advanced/...Je reçois du html qui ressemble à ceci: <html><head><title>Erreur</title></head><body><h4>URI: /saas/api/v2/emploi</h4><h4>le Code d'État: 400</h4></body></html> Aussi, l'api accepte les minuscules valeurs je l'ai montré. Dites-vous que HttpClient est en train de changer à capitalisés valeurs?
OriginalL'auteur Michael Sheely | 2016-05-22
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai compris le problème que j'avais. Il semble que la Sérialisation de mon objet JSON dans une chaîne de première, puis de la publier avec
PostAsJsonAsync
a été en laissant à l'échappement (\) caractères de mon objet, qui était la raison pour laquelle j'ai reçu le Mauvais Demande.Le problème ici, c'était ma première paire clé/valeur dans mon objet JSON avait une touche avec le symbole@. Si j'essaie juste
PostAsJsonAsync
avec l'objet, j'ai perdu le symbole@, ce qui m'a donné une Mauvaise Demande aussi.Ce que j'ai fait était de la Sérialisation de l'objet en chaîne de caractères comme vu ci-dessus, puis je me suis converti il la un Tableau d'Octets, puis créé un nouveau
ByteArrayContent
objet passant dans mon tableau d'octets, l'ajout de laContentType
attribut à laByteArrayContent
en-Têtes, puis à l'aidePostAsync
au lieu dePostAsJsonAsync
. Cela a fonctionné parfaitement.Voici le code:
Problème résolu!
Merci!
OriginalL'auteur Michael Sheely