2012-12-28 9 views
11

Web APIコントローラに動的JSONオブジェクトを渡して、どのタイプのもので処理できるようにする必要があります。私はJSON.NETの例であるthat can be seen hereを使用しようとしましたが、Fiddlerを使用すると、JObectで渡されたものが常にnullであることがわかります。動的JSONオブジェクトをWeb APIに渡す - Newtonsoft例

これはフィドラーに貼り付ける例から発揮される:

[HttpPost] 
public JObject PostSavePage(JObject jObject) 
{   
    dynamic testObject = jObject;   
    // other stuff here 
} 

私はこれに新しいですし、私がいくつかあります:ここ

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"}]} 

ANSは私の非常に単純なWeb APIコントローラメソッドがあります

この特定の例で何か問題がありますか?

もっと重要なのは、JavaScriptのAJAXポストの動的JSONオブジェクトを渡す方が良いでしょうか?

+2

JavaScriptオブジェクトをサーバーに送信する前に、JavaScriptオブジェクトをストリング化する必要があります。あなたの質問に(現在)表示されているデータは、有効なJSONを表していません。 – Perception

+0

新しく作成したMVC4 Web.APIプロジェクトで問題を再現することができませんでした。私は正確に同じ値を持つfiddlerでリクエストを送信し、 'jObject'パラメータは適切にデータで埋められます。あなたのルーティングに何か問題があるかもしれません。カスタムルートはありますか? – nemesv

+0

ありがとうございました。私も新しいプロジェクトを試してみました。そしてあなたが正しいです、jObjectは上手です。私はカスタムルートを持っているので、そこに見えるだろう。 – davy

答えて

3

ここでお手伝いいただいた皆様に感謝します。残念ながら、私は何が間違っていたのか分かりませんでした。

私は新しいプロジェクトにピース単位でプロジェクトを移植しても問題ありません。

情報については、I、現時点では非常に簡単ですRouteConfigクラスを、持っている:APIへの

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 } 
     ); 
    } 
} 

私のコールは今JSON.Stringifyを使用しています。

$.ajax("http://localhost:54997/api/values/PostSavePage/", { 
    data: JSON.stringify(jObject),        
    contentType: 'application/json', 
    type: 'POST' 
}); 

オリジナルのAPIアクション働く

私はこの時点でしか遊んでいないので、コードは最善ではありませんが、他の誰かが同様の問題を抱えている場合には基本的な形で役立つと思いました。

+0

最初のアプリでコントローラを確認していますか? http:// localhost:9185/api/Auto/PostSavePage /それはAutoControllerでなければなりません –

14

パーセプションのコメントによると、あなたのJSONは有効に見えません。 JSONLintを通してそれを実行して、あなたが得る:それはフィールド名を中心に、「持っている

Parse error on line 1: 
{ AlbumName: "Dirty De 
-----^ 
Expecting 'STRING', '}' 

変更:

{ 
    "AlbumName": "Dirty Deeds", 
    "Songs": [ 
     { 
      "SongName": "Problem Child" 
     }, 
     { 
      "SongName": "Squealer" 
     } 
    ] 
} 

はまた、あなたがJTokenまたは動的なオブジェクト(例えばいずれかのためにあなたのjオブジェクトをスワップアウトしようとしていますhere)?

[HttpPost] 
public JObject PostSavePage(JToken testObject) 
{     
    // other stuff here 
} 

OR

[HttpPost] 
public JObject PostSavePage(dynamic testObject) 
{     
    // other stuff here 
} 
+0

ありがとう、これらの提案のどれも私のために働いていません。上記のnemesvのコメントを参照してください。私はそれが私のカスタムルートとは何かでなければならないと思う。 – davy

+0

@davyごめんなさい。 testObjectがnullであることがわかっているなら、あなたのルートはOKであるはずです... PostDavePageの中でブレークポイントを取得できますか?私はあなたのルート設定が共有されている場合、答えに別の刺し傷を取ろうとします。 –

+0

ありがとうございました。奇妙なことが起こっている。私は私の基本的な作業の解決にファイルをコピーするプロセスです。うまくいけば、それはうまくいくか、問題を正確に突き止めることができます。私は、プロジェクトが何らかの形で壊れているかもしれないと思う。なぜなら、私が新しいアプリでそれらを手に入れることができないので、私がまだ入っていない他の奇妙なエラーを受けているからだ。私は何かを見つけたら更新します。再度、感謝します。 – davy

関連する問題