WCF Data Services(EF 4.1に基づく)を使用して、JSONオブジェクトとして渡されたエンティティを永続化するRESTfulWebサービスを作成する方法を理解しようとしています。
プリミティブデータ型のセットを引数としてGETリクエストを受け入れることができるメソッドを作成することができました。私はその解決策が好きではありません。httpリクエストの本文にJSONオブジェクトを含むPOSTリクエストを送信したいと思います。
jsonをオブジェクトにシリアル化するためのフレームワークを取得できないことがわかりましたが、手動で実行しても問題ありません。
私の問題は、POSTリクエストの本文を読み取れないように見えることです。本文はJSONペイロードである必要があります。
これが下の大まかな亀裂です。これを数回繰り返してみましたが、リクエストの本文から生のJSONを取得できないようです。
何かご意見は?これを行うためのより良い方法は?JSONデータをPOSTして処理したいだけです。
[WebInvoke(Method = "POST")]
public void SaveMyObj()
{
StreamReader r = new StreamReader(HttpContext.Current.Request.InputStream);
string jsonBody = r.ReadToEnd(); // jsonBody is empty!!
JavaScriptSerializer jss = new JavaScriptSerializer();
MyObj o = (MyObj)jss.Deserialize(jsonBody, typeof(MyObj));
// Now do validation, business logic, and persist my object
}
My DataServiceは、拡張するEntityFrameworkDataServiceです。
System.Data.Services.DataService<T>
非プリミティブ値をパラメーターとしてメソッドに追加しようとすると、トレースログに次の例外が表示されます。
System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
'Void SaveMyObj(MyNamespace.MyObj)' has a parameter 'MyNamespace.MyObj o' of type 'MyNamespace.MyObj' which is not supported for service operations. Only primitive types are supported as parameters.