3

私のフロントエンド実装者は、かなり複雑なネストされた DTO で奇妙な問題に遭遇しています。

これは、彼がjquery ajax呼び出しを通過しているjsonです

{"Id":"507e7e5aa6305825c012c606","Name":"test fried chicken","Description":"why you no work","Servings":4,"Author":"unit test","Steps":[{"Instructions":"put chicken in egg","Ingredients":[{"PreparationId":"507e7e34a6305825c012c601","MeasureId":"kilogram","Quantity":2,"MeasureType":"weight"},{"PreparationId":"507e7e36a6305825c012c605","MeasureId":"gram","Quantity":100,"MeasureType":"weight"}]},{"Instructions":"put in flour and cook it up","Ingredients":[{"PreparationId":"507e7e35a6305825c012c603","MeasureId":"gram","Quantity":100,"MeasureType":"weight"}]}]}

これは uri/recipes への PUT として行われ、要求側で DTO のデフォルト インスタンスに変換されます (実際に逆シリアル化される情報はありません)。

リクエストからまったく同じ Json を取得して C# コードを実行すると、

var d = new ServiceStack.Text.JsonSerializer<RecipeDTO>();
var re = d.DeserializeFromString(theJson);
var client = new JsonServiceClient(uri);
client.Put<RecipeDTOResponse>("/recipes", re); 

それは動作します。なぜ違いがあるのでしょうか?

4

1 に答える 1

3

WebページとC#クライアントの両方からのIHttpRequestをログに記録した後、c#がapplication / jsonであるのに対し、jquery呼び出しのContentTypeはapplication/x-www-form-urlencodedであることに気付きました。

jquery呼び出しで変更すると、問題が解決しました。

于 2012-10-17T22:16:48.420 に答える