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ファイルで
正しいタイプをパラメータとして使用してください。 JSONのデシリアライゼーションは、フレームワークの一部として実行する必要があります。可能であればWebApi 2を使用してください。属性アプローチを使用してルートを定義するのは、configに登録するよりもずっとうれしいです。 –
@DarrenYoung正しい型を言うとき、JSONを非直列化する型 "データ"について話していますか?そうであれば、私はすでにデータをStringの代わりにPost()メソッドのパラメータとして期待しようとしていますが、デフォルト/ヌル値を持つDataオブジェクトを設定しています... – Arnaud