使用C#将多个参数发布到MVC控制器
我将一个json对象发布到带有C#代码的ASP.Net MVC控制器。 为了简化此示例,对象只是一个具有make和model属性的汽车。 一切都适用于下面的代码。 我的问题是 – 如何发布多个参数? 例如,我如何发布JSON对象,电子邮件地址和电话号码?
//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对象的Controller代码,然后输出json以进行validation。
[HttpPost] public JsonResult showdata(Car c) { return Json(c, JsonRequestBehavior.AllowGet); }
我想做这样的事情:
[HttpPost] public JsonResult showdata(Car c, string email, string phone) { return Json(c, JsonRequestBehavior.AllowGet); }
像这样:
string requestData = "{\"c\": {\"Make\":\"Ford\",\"Model\":\"Mustang\"}, \"email\": \"foo@bar.com\", \"phone\": \"1111\"}";
甚至更好地使用JavascriptSerializer :
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 = "foo@bar.com", 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 = "foo@bar.com", phone = "1111" });
还有一句话:当您使用[HttpPost]
修饰控制器操作时,返回JSON时不需要JsonRequestBehavior.AllowGet
,因此永远不能使用GET动词调用此操作。
这不是问题,请你提出如下要求:
"{\"Make\":\"Ford\",\"Model\":\"Mustang\", \"email\":\"xxx\", \"phone\":\"yyy\" }";
ASP.NET MVC Json绑定器应该是聪明的,应该正确地为方法,例如:
public JsonResult showdata(Car c, string email, string phone)