Ich habe eine erstellt, in der CRUD
Operationen ausgeführt werden. Jetzt wollte ich es auf Echtzeitbasis testen, also entschied ich mich, eine Konsolenanwendung zu erstellen, indem ich dem Tutorial this folgte. Das Tutorial stellt den Code zur Verfügung, in dem der Code beim Ausführen der Anwendung selbst ein Produkt erstellt und es erhält, aktualisiert und löscht. Aber ich möchte Benutzereingaben verwenden. Ich bin erfolgreich bei der Erstellung von Produkten. Aber während es immer ich ein Problem konfrontiert bin, sehen mein CodeDie GET-Methode in der Konsolenanwendung kann nicht verwendet werden
Klasse
class Product
{
[Key]
public string Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public decimal Price { get; set; }
[Required]
public string Category { get; set; }
}
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;
client.BaseAddress = new Uri("http://localhost:7361/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
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 };
var 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:
Environment.Exit(0);
break;
}
}
In case 2
bei product = await GetProductAsync(url.PathAndQuery);
, vermag ich nicht url
Variable zu verwenden, wie es sagt Use of unassigned local variable 'url'
.
Auch ich kann nicht var
außerhalb es erklären, weil es für niemanden initialisiert wird.
Ich habe versucht, den Typ von var
zu string
zu ändern, aber immer noch nicht in der Lage, die Aufgabe zu erfüllen.
Jede Hilfe sehr geschätzt würde
Was würden Sie erwarten, wenn Sie Ihre Konsolenanwendung starten und sofort Option 2 wählen? Woher sollte es das Produkt bekommen? –
Sie haben ein einfaches Problem mit dem Geltungsbereich, das nichts mit dem Erstellen von Webanforderungen zu tun hat. Ihr Code wäre sauberer und einfacher zu verstehen, wenn es sich um eine While-Schleife anstelle von Schaltern mit 'Goto's handelt. – Crowcoder
@KirkLarkin wenn ich Option 2 dann nichts passiert passiert und nach dem Drücken der Enter-Taste die Anwendung beendet – faisal1208