Comment publier objet personnalisé à l'api web à l'aide de C#
J'ai une web api de développement et de déploiement. Il fonctionne avec l'unité de test et à l'aide de fiddler. Cependant, si je créer un nouveau projet et d'essayer de publier des données, il envoie en retour un 400 Bad Request error. Je suis à la recherche d'un moyen pour publier cet objet personnalisé à l'aide d'un client écrit en C#. Contrairement à la WCF il n'y a pas de matadata pour créer proxy de ces objets, puis les instancier et de la transmettre à l'appel de méthodes. Comment avez-vous passer un objet personnalisé comme Client en tant que paramètre à une méthode?
URL serait http://host/directory/api/customer/AddNewCustomer
et définition de la méthode, c'est comme
[HttpPost]
public bool AddNewCustomer(Customer customerObj)
MODIFIER
Voici mon code client
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://host/directory/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(30.0);
//strong typed instance
var values = new JObject();
values.Add("FirstName", "John");
values.Add("LastName", "Doe");
HttpContent content = new StringContent(values.ToString(), Encoding.UTF8,"application/json");
var response = client.PostAsJsonAsync("api/customer/AddNewCustomer", content).Result;
- Êtes-vous sûr d'envoyer une requête post et pas un autre?
- Avez-vous essayé? stackoverflow.com/questions/4088625/...
- Veuillez vérifier avec un violon que vous êtes réellement l'envoi de votre JSON avec
Content-Type: application/json
dans l'en-tête avec unContent-Length: {lengthOfYourContent}
. Ils sont nécessaires pour la WebApi à les gérer correctement - En outre, vous devriez être en mesure d'utiliser Newtonsoft
JsonConvert.SerializeObject(yourObject)
, il vous donnera une chaîne json de la valeur de votre objet, qui peut être utilisé dans votreStringContent
Vous devez vous connecter pour publier un commentaire.
Idéalement Client serait dans une catégorie distincte de la bibliothèque de modèles et de vous pourrait dire que dll entre les projets. Mais n'importe quel objet avec la même propriété, les noms de travailler en raison de l'API web sera sérialisé à Json ou xml et de faire les mappages automatiquement.
Après avoir essayé plusieurs solutions, avec fiddler je suis venu pour savoir que le contenu de l'objet n'a pas été définie. C'est étrange mais c'était le cas. J'ai donc essayé en passant JObject directement sans moulage HttpContent et il a travaillé