2017-08-08 8 views
1

PostmanからのPOSTリクエストとHttpClientを使用する別のC#プログラムからGET & POSTリクエストを実行できるので、うまく動作するC#WebAPI(Web APIを初めて使用しています)があります。JSONのネストされたオブジェクトをPost()メソッドに渡します - C#WebAPI

POSTメソッドは、POSTリクエストを送信したときにその中のコードがトリガされたかどうかをチェックするためにブレークポイントを配置しているので「動作中」です。

DBからいくつかのデータを読み込み、それをJSON.Netでシリアル化して&をWeb APIに送信することを「別のC#プログラム」が担当しています。

ウェブAPIでは、シリアル化して送信する前に同じオブジェクトを再構築するためにJSON直列化オブジェクト(ネストされたオブジェクトを含む)を使用したいと考えています。このオブジェクトの作成に使用されるすべてのクラスは、webAPIプログラムに存在します。

JSON文字列を受け取ってオブジェクトに逆シリアル化する必要があると思いますが、この文字列を取得するのに手間がかかりません。ポストパラメータとしてnullが返されます。私のコード

WebAPIの構成

public static class SHPC_APIConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "ShPcAPI", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new {id = RouteParameter.Optional} 
     ); 

     // Configure JSON formatter 
     var jsonFormatter = config.Formatters.JsonFormatter; 
     jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
    } 
} 

コントローラ

public class DataController : ApiController 
{ 
    public string Get() 
    { 
     return "Hello world!"; 
    } 

    public HttpResponseMessage Post([FromBody] string value) 
    { 
     var data = JsonConvert.DeserializeObject<Data>(value); 
     Console.WriteLine(value != string.Empty ? "OK" : "KO"); 
     return new HttpResponseMessage(HttpStatusCode.OK); 
    } 
} 

GETリクエストを実行するには動作しますが、私は私が期待する答えを得ます。どこでも私は郵便配達員または私の他のC#プログラムからリクエストしています。

しかし、POSTリクエストを実行しようとすると、リクエストのパラメータ値は、郵便番号または他のC#プログラムから要求されている場合は常にnullになります。 App_StartにあなたWebApiConfigファイルで

+0

正しいタイプをパラメータとして使用してください。 JSONのデシリアライゼーションは、フレームワークの一部として実行する必要があります。可能であればWebApi 2を使用してください。属性アプローチを使用してルートを定義するのは、configに登録するよりもずっとうれしいです。 –

+0

@DarrenYoung正しい型を言うとき、JSONを非直列化する型 "データ"について話していますか?そうであれば、私はすでにデータをStringの代わりにPost()メソッドのパラメータとして期待しようとしていますが、デフォルト/ヌル値を持つDataオブジェクトを設定しています... – Arnaud

答えて

2

は登録機能でこれを入れてみてください:

var settings = 
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings; 

これは、JSON内のすべての応答をシリアル化します。

+0

ありがとうございます。なぜ私のjsonFormatter varがRegister関数でジョブを実行しないのか知っていますか? – Arnaud

+0

これはおそらくjsonをXMLレスポンスに戻そうとしているからです。 –

+0

ありがとうございました。 – Arnaud

関連する問題