私はWebAPI v2にjsonオブジェクトのHTTP POSTを行う必要がある非常に単純なC#Httpクライアントコンソールアプリケーションを持っています。C#HttpClientを使用してJSONオブジェクトのHTTP Postを正しく実行するには?
class Product
{
public string Name { get; set; }
public double Price { get; set; }
public string Category { get; set; }
}
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
var response = await client.PostAsJsonAsync("api/products", gizmo);
明示的な操作: - サポートされていないメディアタイプ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using System.Net.Http.Formatting;
namespace Client1
{
class Program
{
class Product
{
public string Name { get; set; }
public double Price { get; set; }
public string Category { get; set; }
}
static void Main(string[] args)
{
RunAsync().Wait();
}
static async Task RunAsync()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:8888/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("Category", "value-1"),
new KeyValuePair<string, string>("Name", "value-2")
});
var result = client.PostAsync("Incident", content).Result;
var r = result;
}
}
}
}
しかし、私はPOSTボディでJSONを使用しようとすると、私はエラー415を得る: 現在、私のアプリはFormUrlEncodedContentを使用してPOSTを行うことができます
string json = JsonConvert.SerializeObject(product);
var response = await client.PostAsJsonAsync("api/products", json);
これを処理すると、POST JSONにできるようにする適切な方法は何ですか:JSONのシリアライズは私のために結果を変更しないのですか?
サーバーの実装を所有していますか? '415 - Unsupported media Type'は、JSONをサポートしていないと言っているサーバー側エラーです。クライアントコードとは無関係です。 – Jacob
はい、私のサーバー側はODataコントローラです:[HttpPost] public void Post([FromBody] Product value) { var req = Request; var p =値; } –
はい、サーバープロジェクトはJSONを受け入れて返すように設定されていますか?リクエストにヘッダーを追加して、JSONも送信していることを示してください。 – krillgar