J'ai créé un web-API
de produits suivant 1 et 2 tutoriel. Le 2ème tutoriel est l'application console dans laquelle le web-api
est appelé. Maintenant, quand je crée un seul produit, il est capable de voir. Mais quand je crée plus d'un produit, seule la dernière entrée est visible. Pour une meilleure compréhension, voir le code ci-dessous.GET toutes les données de l'API WEB à l'aide de l'application console
static HttpClient client = new HttpClient();
static void ShowProduct(Product product)
{
Console.WriteLine($"Name: {product.Name}\tPrice: {product.Price}\tCategory: {product.Category}");
}
static async Task<Uri> CreateProductAsync(Product product)
{
HttpResponseMessage response = await client.PostAsJsonAsync("api/product/", product);
response.EnsureSuccessStatusCode();
// return URI of the created resource.
return response.Headers.Location;
}
static async Task<Product> GetProductAsync(string path)
{
Product product = null;
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
product = await response.Content.ReadAsAsync<Product>();
}
return product;
}
static async Task RunAsync()
{
int a;
decimal price = 0;
string name = null, category = null;
char option;
//string url;
client.BaseAddress = new Uri("http://localhost:7361/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Uri url = null;
try
{
label:
Console.Write("1. Create a product\n");
Console.Write("2. View products\n");
Console.Write("3. Update a product\n");
Console.Write("4. Delete a product\n");
Console.Write("5. Exit\n");
Console.WriteLine("\nEnter your choice: ");
a = Convert.ToInt32(Console.ReadLine());
switch(a)
{
case 1:
Console.WriteLine("Enter name of the product: ");
name = Convert.ToString(Console.ReadLine());
Console.WriteLine("\nEnter price of the product: ");
price = Convert.ToDecimal(Console.ReadLine());
Console.WriteLine("\nEnter category of the product: ");
category = Convert.ToString(Console.ReadLine());
// Create a new product
Product product = new Product { Name = name, Price = price, Category = category };
url = await CreateProductAsync(product);
Console.WriteLine($"Created at {url}");
Console.WriteLine("Want to create more product(s)? (y/n): ");
option = Convert.ToChar(Console.ReadLine());
if(option == 'y' || option == 'Y')
{
Console.Clear();
goto case 1;
}
else if(option == 'n' || option == 'N')
{
Console.Clear();
goto label;
}
break;
case 2:
// Get the product
product = await GetProductAsync(url.PathAndQuery);
ShowProduct(product);
break;
//case 3:...
//case 4:...
//case 5:...
}
Je veux afficher tous les produits créés. Pour cela je dois créer une liste de produits en les créant. Mais le problème est que je ne sais pas où le faire?
Update 1
Le débogage du code du static async Task<Product> GetProductAsync(string path)
le path
obtient le dernier ID de produit comme 'api/produit/2', mais je veux être comme ça api/produit/'. Le chemin inclut le dernier entré id
.
Mise à jour 2
Pour obtenir tous les produits que je sont entrés dans le url
dans product = await GetProductAsync("http://localhost:7361/api/product");
Mais maintenant, après l'exécution de l'application que je reçois l'erreur ci-dessous.
Cannot deserialize the current JSON object (e.g. {“name”:“value”})
Mise à jour 3
En cochant la réponse de l'API dans Postman
ci-après les données que je suis
[
{
"Id": 1,
"Name": "yo-yo",
"Category": "toys",
"Price": 45
},
{
"Id": 2,
"Name": "mobile",
"Category": "electronics",
"Price": 45000
}]
Toute aide serait très appréciée
Quelle réponse JSON obtenez-vous de l'API? 'GetProductAsync' renvoie un seul produit. La méthode 'ShowProduct' n'a qu'une seule instance de Product comme argument et vous ne passez qu'un seul produit à l'argument' ShowProduct'. Donc, il va sûrement afficher un seul produit. Vous devez vérifier ce qui est renvoyé par l'API lorsque vous demandez tous les produits. –
@ChetanRanpariya Je l'ai fait dans 'Update 2'. – faisal1208
Vous devez savoir quel JSON vous obtenez de l'API pour comprendre pourquoi vous obtenez l'erreur 'Impossible de désérialiser l'objet JSON en cours'.On dirait que l'API vous renvoie la collection de produits et que vous essayez de la désérialiser en un seul produit. Si vous partagez la réponse JSON de l'API, je peux fournir une solution concrète. –