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;
}
投稿の形式としての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();