12

C# オブジェクトを Web API コントローラーに渡そうとしています。この API は、そこに投稿された Product タイプのオブジェクトを格納するように構成されています。Jquery Ajax メソッドを使用してオブジェクトを正常に追加しましたが、C# で同じ結果を得ようとしています。

Post リクエストを API に送信する単純なコンソール アプリケーションを作成しました。

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
}

         static void Main(string[] args)
    {
        string apiUrl = @"http://localhost:3393/api/products";
        var client = new HttpClient();
        client.PostAsJsonAsync<Product>(apiUrl, new Product() { Id = 2, Name = "Jeans", Price = 200, Category =  "Clothing" });

    }

postproduct メソッドは呼び出されません。このオブジェクトをコントローラーに送信する方法は?

アイテムの追加方法:

    public HttpResponseMessage PostProduct([FromBody]Product item)
    {
        item = repository.Add(item);
        var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item);

        string uri = Url.Link("DefaultApi", new { id = item.Id });
        response.Headers.Location = new Uri(uri);
        return response;
    }
4

1 に答える 1

17

投稿の形式として JSON の受け入れを何らかの形で無効にしているようです。エンドポイントにデータを送信し、 を使用して新しい製品を作成することができましたapplication/x-www-form-urlencoded。それはおそらくあなたのjQueryリクエストがそれを行っている方法です。

Web API の構成コードを表示できますか? デフォルトのフォーマッタを変更しますか?

または、HttpClient からフォームを送信することもできます。例えば

    string apiUrl = "http://producttestapi.azurewebsites.net/api/products";
    var client = new HttpClient();
    var values = new Dictionary<string, string>()
        {
            {"Id", "6"},
            {"Name", "Skis"},
            {"Price", "100"},
            {"Category", "Sports"}
        };
    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync(apiUrl, content);
    response.EnsureSuccessStatusCode();
于 2013-10-26T20:33:05.247 に答える