2017-01-20 5 views
0

Json形式のデータをWeb APIコントローラにきちんと(より自然な)方法で送信する方法を見つけようとしています。デフォルトの[FromBody]動作の代わりにasp.net web apiにきれいに書式設定されたjsonデータを送信します。

私に説明させてください。私はこのコントローラがあるとします。

[HttpPost] 
public class StudentController : ApiController 
{ 

    public void PostSomething([FromBody] string name, [FromBody] Student s) 
    { 
     //do something 
    } 
} 

(それが正しくフォーマットされたように)私が投稿したいJSONデータは、このようなものです:

{ 
    "name" : "John", 
    "student" : { 
     "id" : "1", 
     "age" : "22" 
    } 
} 

しかし、私はへのWeb APIの送るべきですparameter bindオブジェクトは、次のようにする必要があります:

{ 
    "John", 
    { 
     "id" : "1", 
     "age" : "22" 
    } 
} 

問題は、私は私の希望JSON形式、両方namestudentオブジェクトワットを使用している場合コントローラのPostSomethingメソッドではnullになります。

最初の例に似た形式のjsonリクエストをWeb APIコントローラに送信するにはどうすればよいですか?

+0

2番目の例は、有効なjsonのようには見えず、テストしたすべてのバリデーターで失敗します。 –

+0

これはまさにそのケースであり、あなたはまったく正しいです。しかし、Web APIコントローラは、このように送信すればパラメータを受け入れます。それは問題です – roostaamir

+0

あなたの質問は完全に私には分かりません。これは、あなたがサードパーティから受け取る必要があるJSONですか、それとも、サードパーティに送信するために作成する必要があるJSON形式ですか? –

答えて

1

目的のJSON構造を使用するには、PostSomethingのメソッドシグネチャを変更し、送信されたデータを表すクラスを導入することができます。例えば。

public class StudentTransferObject { 
    public string Name {get; set;} 
    public Student Student {get; set;} 
} 
コントローラー付き

[HttpPost] 
public class StudentController : ApiController 
{  
    public void PostSomething([FromBody] StudentTransferObject studentInformation) 
    { 
     //do something 
    } 
} 
+0

まだパラメータの名前をキーとして指定することはできません – roostaamir

+0

実際には私は間違っていて、あなたのソリューションは完全に機能しています。ありがとうございました – roostaamir

1
  1. Read textレスポンスボディからと解析オブジェクトを自分で:custom bindingかと

    [HttpPost] public async Task<string> PostSomething() { string result = await Request.Content.ReadAsStringAsync(); //parse here how you want return result; }

  2. Dynamic serialization 210。

関連する問題