使用POST设置body参数,使用contentLength设置web请求

时间:2018-02-08 08:20:34

标签: c# asp.net json

webservice正在返回JSON对象列表。 JSON对象是这样的:

"id": "1",
"stanze": 2,
"dotazione": [{
    "id": 31,
    "nome": "Wi-Fi"
},
{
    "id": 23,
    "nome": "Garden"
},
{
    "id": 3,
    "nome": "TV"
}]

RootObject是一个类,为JSON对象结构自动在线生成。

List<RootObject> allObj = new List<RootObject>(); 

最后,我想将JSON响应反序列化为RootObject(s)的列表

ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(allObj.ToString());

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.thewebservice.com/api");

我已设法为网络服务请求添加标头参数。

request.Method = "POST";
request.MediaType = "application/json";
request.ContentType = "application/vnd.api+json";

第1期:不要认为ContentLength设置正确

request.ContentLength = data.Length;/// ????
request.Accept = "application/vnd.api+json";

这些是标题

的参数
request.Headers.Add("X-USER", "myuser");
request.Headers.Add("X-PASS", "myuser2018Net");
request.Headers.Add("X-WHAT", "ALLOGGILIST");
request.Headers.Add("X-ACTION", "GET");

第2期如何设置身体参数?  例如参数名称= lingua,值= EN

我使用SOAP测试了webservice。我将上面的参数放在媒体类型下面的部分。 enter image description here

2 个答案:

答案 0 :(得分:0)

根据MSDN站点,确保data.Length的值不是-1。 https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contentlength(v=vs.110).aspx

您可以使用以下设置语言:

WebHeaderCollection myWebHeaderCollection = request.Headers;    

//Include English in the Accept-Langauge header. 
myWebHeaderCollection.Add("Accept-Language","en;q=0.8");

答案 1 :(得分:0)

如果您使用WCF作为Web服务,则可能需要使用WebInvoke声明该方法,如下所示:

[WebInvoke(
UriTemplate = "yourpath",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]

专注于“BodyStyle”,因为该param将定义如何使用BODY传递参数。

这篇文章解释了它:

Can't Pass JSON Post Data to WCF REST Service using Fiddler

希望有所帮助

相关问题