可以使用HttpWebRequest同时传递表单变量和json对象吗

本文关键字:变量 json 对象 表单 HttpWebRequest 可以使 | 更新日期: 2023-09-27 18:27:52

我需要将json字符串和表单变量发布到url(https://www.somedomain.com/checkout.jsp)。

我的json将包含订单信息(用户电子邮件、发货地址、账单地址、信用卡号等)。除了json字符串之外,我还需要传递一个表单变量,如"bmForm=submit_order_service"

目前,我正试图通过ASP.Net MVC 3(C#)中的HttpWebRequest对象来实现这一点。

这是只处理json字符串的代码。所以,我的问题是,我如何修改这些代码,以便也传递表单变量。

var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.somedomain.com/checkout/checkout.jsp");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
httpWebRequest.Accept = "*/*";
httpWebRequest.UserAgent = "SomeUserAgent";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = sb.ToString();
    streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var responseText = streamReader.ReadToEnd();
}

如果使用HttpWebRequest无法完成我的要求,也许有人可以推荐另一种方法?

可以使用HttpWebRequest同时传递表单变量和json对象吗

您可以对表单数据进行HTML编码,并将其作为参数附加到URL:http://www.somedomain.com/checkout/checkout.jsp?param1=value1&param2=value2...。基本上,将表单视为其操作设置为GET(当然,请使用POST HTTP谓词)。

如果你想在"Post Data"中同时包含Json和表单参数,你必须对Json进行url编码,并将其作为表单参数与其他表单参数一起添加:

例如

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "json=[yoururlencodedjson]&var2=value2&var3=value3"
req.ContentLength = postData.Length;

从本质上讲,您需要从服务提供商那里了解他们期望的格式。