[英]Post multiple parameters to MVC Controller using C#
我將 json object 發布到帶有 ZD7EFA19FBE7D29372FD5ADB60242 代碼的 ASP.Net MVC controller 在這個例子中,為了簡單起見,object 只是一輛具有品牌和 model 屬性的汽車。 一切都適用於下面的代碼。 我的問題是 - 我將如何發布多個參數? 例如,我將如何發布 JSON object、email 地址和電話號碼?
//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);
這里是 Controller 代碼,它從帖子中檢索 json object,然后輸出 Z466DEEC76ECDF2446D38571F63
[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 序列化您的 object ,就好像您正在使用這些字符串連接一樣,如果數據包含一些特殊字符,您的請求可能會很容易中斷。
哦,在我忘記之前:使用視圖模型。
所以而不是:
[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"
});
還有一句話:返回JsonRequestBehavior.AllowGet
,因為您已經使用[HttpPost]
修飾了 controller 操作,因此永遠不能使用 GET 動詞調用此操作。
這不是問題,讓您提出如下要求:
"{\"Make\":\"Ford\",\"Model\":\"Mustang\", \"email\":\"xxx\", \"phone\":\"yyy\" }";
ASP.NET MVC Json binder 應該足夠聰明,可以正確地使用方法,例如:
public JsonResult showdata(Car c, string email, string phone)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.