動的JSONオブジェクトをWebAPIコントローラーに渡して、タイプに応じて処理できるようにする必要があります。 JSON.NETの例を使用してみました ここで見ることができます しかし、Fiddlerを使用すると、 JObectで渡されるものは常にnullです。
これは、Fiddlerに貼り付けられた例からの成果です。
POST http://localhost:9185/api/Auto/PostSavePage/ HTTP/1.1
User-Agent: Fiddler
Content-type: application/json
Host: localhost
Content-Length: 88
{AlbumName: "Dirty Deeds",Songs:[ { SongName: "Problem Child"},{ SongName:
"Squealer"}]}
これが私の非常に単純なWebAPIコントローラーメソッドです。
[HttpPost]
public JObject PostSavePage(JObject jObject)
{
dynamic testObject = jObject;
// other stuff here
}
私はこれに不慣れで、この分野に関していくつか質問があります。
この特定の例で私は何か間違ったことをしていますか?
間違いなく、もっと重要なことに、動的JSONオブジェクトを渡すためのより良い方法はありますか(JavaScript AJAX post)から)?
ここで助けてくれたすべての人に感謝します。残念ながら、私は何が悪かったのかを突き止めることができませんでした。
プロジェクトを1つずつ新しいプロジェクトに移植しましたが、正常に機能します。
参考までに、RouteConfigクラスがあります。これは現時点では非常に単純です。
public class RouteConfig
{
private static string ControllerAction = "ApiControllerAction";
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: ControllerAction,
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
APIへの呼び出しでJSON.Stringifyが使用されるようになりました。
$.ajax("http://localhost:54997/api/values/PostSavePage/", {
data: JSON.stringify(jObject),
contentType: 'application/json',
type: 'POST'
});
元のAPIアクションは機能します。
現時点ではこれで遊んでいるだけなので、コードは最適ではありませんが、他の誰かが同様の問題を抱えている場合に備えて、基本的な形式で役立つと思いました。
Perceptionのコメントによると、JSONは有効に見えません。 JSONLint を実行すると、次のようになります。
Parse error on line 1:
{ AlbumName: "Dirty De
-----^
Expecting 'STRING', '}'
フィールド名の前後に「」を付けるように変更します。
{
"AlbumName": "Dirty Deeds",
"Songs": [
{
"SongName": "Problem Child"
},
{
"SongName": "Squealer"
}
]
}
また、JObjectをJTokenまたはDynamicオブジェクト(例: here )に交換しようとしましたか?
[HttpPost]
public JObject PostSavePage(JToken testObject)
{
// other stuff here
}
OR
[HttpPost]
public JObject PostSavePage(dynamic testObject)
{
// other stuff here
}