MVC 4 Web Api Post
Je veux faire une insertion à partir d'un client distant pour cela j'ai besoin d'envoyer des données via http.
Je peux utiliser la getPerformances()
correctement avec un httpClient
api/performances?date={0}
Je veux vous demander si mon postPorformances()
implemntation à l'intérieur de mon PerformancesController
est corrrect et si il est de savoir comment l'appeler à partir d'un client?
Voici mon oeuvre:
public class PerformancesController : ApiController
{
//GET api/performances
public IEnumerable<Performance> getPerformances(DateTime date)
{
return DataProvider.Instance.getPerformances(date);
}
public HttpResponseMessage postPerformances(Performance p)
{
DataProvider.Instance.insertPerformance(p);
var response = Request.CreateResponse<Performance>(HttpStatusCode.Created, p);
return response;
}
}
public class Performance {
public int Id {get;set;}
public DateTime Date {get;set;}
public decimal Value {get;set;}
}
J'ai essayé celui-ci, mais je ne suis pas certaine:
private readonly HttpClient _client;
string request = String.Format("api/performances");
var jsonString = "{\"Date\":" + p.Date + ",\"Value\":" + p.Value + "}";
var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
var message = await _client.PutAsync(request, httpContent);
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
HttpClient
à l'appel de cette méthode:Dans cet exemple, je suis en utilisant le générique
PostAsync<T>
méthode me permettant d'envoyer n'importe quel objet comme deuxième paramètre et choisissez le type de média formateur. Ici, j'ai utilisé un objet anonyme imitant la même structure que votrePerformance
modèle sur le serveur et leJsonMediaTypeFormatter
. Vous pouvez bien sûr partager cettePerformance
modèle entre le client et le serveur en le plaçant dans l'un des contrats de projet afin que les modifications sur le serveur serait également automatiquement répercuté sur le client.Côté remarque: C# naming convention dicte que les noms de méthode doit commencer avec une lettre majuscule. Donc
getPerformances
devrait êtreGetPerformances
ou encore mieuxGet
etpostPerformances
devrait êtrePostPerformances
ou encore mieuxPost
.