3

JSON を受け取り、それを StringContent に入れて API に渡したいと考えています。そこから、JSON を逆シリアル化してクラスに戻し、そこから使用したいと考えています。現在、APIに到達したときにlogInfoが空であることから、デシリアライズしようとするとエラーが発生します。パラメータを書き出してみると、イベント ログに空です。以下のコンシューマーと API コードを参照してください。

        public void Log(LogInfo logInfo)
        {
        using (var client = CreateHttpClient())
        {
            var jsonData = JsonConvert.SerializeObject(logInfo);
            HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
            HttpResponseMessage response = client.PostAsync("Logger/Log", content).Result;

            if (!response.IsSuccessStatusCode)
            {
                throw new InvalidOperationException($"{response} was not successful.");
            }
        }
    }


        [HttpPost]
    public HttpResponseMessage Log([FromBody] string logInfo)
    {
        //var logData = JsonConvert.DeserializeObject<LogInfo>(logInfo);
        EventLog.WriteEntry("TestApp", logInfo);
        EventLog.WriteEntry("TestApp", Request.Content.ReadAsStringAsync().Result);
        //Log(logData);

        return Request.CreateResponse(HttpStatusCode.OK);
    }
4

1 に答える 1

1

コントローラー メソッド Log は、LogInfo パラメーターを取る必要があります。この LogInfo モデルは、DTO/POCO として機能するクラスです。したがって、収集するプロパティ (ゲッターとセッター) のみを含める必要があります。次に、この DTO/POCO をビジネス ドメイン モデルにマップできます。

  [HttpPost]
public HttpResponseMessage Log(LogInfo logInfo)
{
   ...
}
于 2016-11-09T05:16:03.183 に答える