2016-08-25 11 views
0

私は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のシリアライズは私のために結果を変更しないのですか?

+1

サーバーの実装を所有していますか? '415 - Unsupported media Type'は、JSONをサポートしていないと言っているサーバー側エラーです。クライアントコードとは無関係です。 – Jacob

+0

はい、私のサーバー側はODataコントローラです:[HttpPost] public void Post([FromBody] Product value) { var req = Request; var p =値; } –

+1

はい、サーバープロジェクトはJSONを受け入れて返すように設定されていますか?リクエストにヘッダーを追加して、JSONも送信していることを示してください。 – krillgar

答えて

0

FormUrlEncodedContentとして送信すると予想される場合は、MediaTypeWithQualityHeaderValue( "application/json")が間違っています。これにより、要求のcontent-typeがjsonに設定されます。 application/x-www-form-urlencodedを代わりに使用するか、MediaTypeWithQualityHeaderValueをまったく設定しないでください。

1

私はFormUrlEncodedContentにこれを掲示しています、私は_authorizationUrlが絶対URLである

 HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string> 
     { 
      {"grant_type", "password"}, 
      {"client_id", _clientId}, 
      {"client_secret", _clientSecret}, 
      {"username", _userName}, 
      {"password", _password} 
     } 
      ); 

      var message = 
       await httpClient.PostAsync(_authorizationUrl, content); 

を使用していたコードの範囲です。

私はあなたのようなこれらのプロパティのいずれかの

  client.BaseAddress = new Uri("http://localhost:8888/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

をしている設定ではないのです。

+0

正確に。これは私が私の答えで言ったことです。しかし、なぜ誰かがそれを落としてしまったのかは分かりません。 – Developer

+0

誰が知っていますか?私はあなたに投票します。 – Fran

+0

ありがとう。乾杯... – Developer

関連する問題