Ich habe eine web-API
von Produkten folgenden 1 und 2 Tutorial erstellt. Das 2. Tutorial ist die Konsolenanwendung, in der der web-api
aufgerufen wird. Wenn ich nun ein einzelnes Produkt erstelle, kann es angezeigt werden. Aber wenn ich mehr als ein Produkt erstelle, ist nur der letzte Eintrag sichtbar. Zum besseren Verständnis siehe den folgenden Code.GET alle Daten von WEB-API mit Konsole-Anwendung
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:...
}
Ich möchte alle erstellten Produkte anzeigen. Dazu muss ich beim Erstellen eine Produktliste erstellen. Aber das Problem ist, dass ich nicht weiß, wo ich es machen soll?
Update 1
Auf Debuggen den Code die static async Task<Product> GetProductAsync(string path)
die path
die letzte Produkt-ID als 'api/product/2', aber ich will sein wie das 'api/Produkt /' bekommt. Der Pfad enthält die zuletzt eingegebene id
.
Update 2
Für alle Produkte bekommen die url
in Ich habe product = await GetProductAsync("http://localhost:7361/api/product");
eingegeben Aber jetzt nach der Ausführung der Anwendung ich die unten Störung erhalte.
Cannot deserialize the current JSON object (e.g. {“name”:“value”})
aktualisieren 3
Durch die API-Antwort in Postman
Überprüfung finden Sie die Daten, die i
[
{
"Id": 1,
"Name": "yo-yo",
"Category": "toys",
"Price": 45
},
{
"Id": 2,
"Name": "mobile",
"Category": "electronics",
"Price": 45000
}]
bekam Jede Hilfe wäre sehr
Welche JSON-Antwort erhalten Sie von der API? 'GetProductAsync' gibt nur ein Produkt zurück. Die 'ShowProduct'-Methode hat nur eine Instanz von Product als Argument und Sie übergeben nur ein Produkt an das' ShowProduct'-Argument. So wird es sicher nur ein Produkt anzeigen. Sie müssen überprüfen, was von der API zurückgegeben wird, wenn Sie alle Produkte von dieser API anfordern. –
@ChetanRanpariya Ich habe es in 'Update 2' getan. – faisal1208
Sie müssen wissen, welche JSON Sie von der API erhalten, um zu verstehen, warum Sie den Fehler 'Das aktuelle JSON-Objekt nicht deserialisieren' erhalten können.Es sieht so aus, als ob die API Ihnen die Sammlung von Produkten zurückgibt und Sie versuchen, sie zu einem einzigen Produkt zu deserialisieren. Wenn Sie die JSON-Antwort der API teilen, kann ich eine konkrete Lösung anbieten. –