-2

CRUD操作が実行されるweb APIを作成しました。今度はリアルタイムでテストしたいので、thisチュートリアルに従うことでコンソールアプリケーションを作ることにしました。このチュートリアルでは、アプリケーションを実行している間にコードを作成し、それを取得し、更新して削除するコードを提供します。しかし、私はユーザーの入力を使用したい。私は製品の作成に成功しています。しかし、それは私が問題に直面しています、私のコードproduct = await GetProductAsync(url.PathAndQuery);case 2コンソールアプリケーションでGETメソッドを使用できません

クラス

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; } 
} 

コンソール

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; 
      } 
} 

を参照してください取得中に、私はとしてurl変数を使用することができませんそれはUse of unassigned local variable 'url'と言います。

また、誰にも初期化されないため、varを外部に宣言することはできません。

タイプをvarからstringに変更しようとしましたが、まだタスクを実行できませんでした。

すべてのヘルプは非常に

+0

コンソールアプリケーションを起動して直ちにオプション2を選択した場合、どうなると思いますか?どこから製品を手に入れますか? –

+1

簡単なスコープの問題はありますが、Webリクエストを行うこととは関係ありません。あなたのコードは、 'goto'sでスイッチの代わりにwhileループであるならば、より洗練されたものになります。 – Crowcoder

+0

@ KirkLarkinオプション2を選択すると、何も起こりません。アプリケーションが終了すると、アプリケーションは終了します。 – faisal1208

答えて

1

が割り当てられていない変数の使用を許可するようにコンパイラを買収する方法であなたのヒントを共有いただければ幸いです。)

あなたは、その変数doesnのがcase 2:内の変数urlを使用しようとしています'tがこのケースの範囲内に存在します。あなたがcase 1:urlを宣言しているようで、技術的には、この変数はバックステップbreakステートメント決算場合、過去のアクセス1.

移動することで迅速な修正がdelcareことですvariable scope within switch statement in c#

に迅速な読み取りを持つことはできませんUri urlswitch()の直前に挿入すると、スイッチ内のすべてのケースでアクセスできます。初期値を与えるか、またはdefault:文を追加してそこに初期化してから、コード内でさらに使用するようにしてください。

+0

私はスイッチの外に 'Uri url'を宣言しました。オプション2を選択したときにアプリケーションを実行した後、メディアタイプ 'text/html'.3' – faisal1208

+0

のコンテンツから 'Product'タイプのオブジェクトを読み込むためのMediaTypeFormatterは使用できません。何か問題でも。 – faisal1208

関連する問題