2011-07-08 10 views
3

C#コードでASP.Net MVCコントローラにjsonオブジェクトをポストしています。この例では物事を単純にするために、オブジェクトはmakeプロパティとmodelプロパティを持つ単なる車です。以下はすべてのコードでうまくいきます。私の質問は - 複数のパラメータをどのように投稿するのですか?たとえば、JSONオブジェクト、電子メールアドレス、電話番号を投稿するにはどうすればよいですか?複数のパラメータをMVCコントローラにポストするC#

//post to form 
    string requestData = "{\"Make\":\"Ford\",\"Model\":\"Mustang\"}"; 
    byte[] data = Encoding.UTF8.GetBytes(requestData); 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://receiving.url/showdata"); 
    request.Method = "POST"; 
    request.ContentType = "application/json"; 
    Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(data, 0, data.Length); 
    dataStream.Close(); 

    WebResponse response = request.GetResponse(); 
    string result = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
    Console.Write(result); 

投稿者からjsonオブジェクトを取得し、検証目的でjsonオブジェクトを出力するコントローラコードです。このよう

[HttpPost] 
    public JsonResult showdata(Car c, string email, string phone) 
    { 

     return Json(c, JsonRequestBehavior.AllowGet); 
    } 

答えて

9

string requestData = "{\"c\": {\"Make\":\"Ford\",\"Model\":\"Mustang\"}, \"email\": \"[email protected]\", \"phone\": \"1111\"}"; 

あるいはさらに良いJavascriptSerializer使用:

[HttpPost] 
    public JsonResult showdata(Car c) 
    { 
     return Json(c, JsonRequestBehavior.AllowGet); 
    } 

私はこのような何かを探してい

using System; 
using System.Net; 
using System.Text; 
using System.Web.Script.Serialization; 

class Program 
{ 
    static void Main() 
    { 
     var serializer = new JavaScriptSerializer(); 
     string requestData = serializer.Serialize(new 
     { 
      c = new 
      { 
       make = "Ford", 
       model = "Mustang" 
      }, 
      email = "[email protected]", 
      phone = "1111" 
     }); 

     using (var client = new WebClient()) 
     { 
      client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
      var result = client.UploadData("http://receiving.url/showdata", Encoding.UTF8.GetBytes(requestData)); 
      Console.WriteLine(Encoding.UTF8.GetString(result)); 
     } 
    } 
} 

をどの意志JSONを正しく処理するこれらの文字列連結を使用しているかのように、データに特殊文字が含まれていると、リクエストが簡単に破損する可能性があります。

ああ、忘れる前に:ビューモデルを使用してください。

ので、代わりの:

[HttpPost] 
public JsonResult showdata(Car c, string email, string phone) 
{ 
    ... 
} 

あなたは間違いなく持つべきである:

[HttpPost] 
public ActionResult ShowData(ShowDataViewModel data) 
{ 
    ... 
} 

、その後:

string requestData = serializer.Serialize(new 
{ 
    make = "Ford", 
    model = "Mustang", 
    email = "[email protected]", 
    phone = "1111" 
}); 

、別の発言を:返すとき、あなたはJsonRequestBehavior.AllowGetを必要としませんあなたのコントローラーのアクションを[HttpPost]で飾っているのでJSONアクションをGET動詞で呼び出すことはできません。

1

それはあなたのように要求します、問題ではありません。

public JsonResult showdata(Car c, string email, string phone) 
:ASP.NET MVC JSONバインダーは同様に、enought正しく方法のためのBingにスマートでなければなりません

"{\"Make\":\"Ford\",\"Model\":\"Mustang\", \"email\":\"xxx\", \"phone\":\"yyy\" }"; 

関連する問題