簡體   English   中英

使用 C# 將多個參數發布到 MVC Controller

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM