我有.Net 4.0。
我正在尝试使用标头和数据发送一个Web服务(我无法控制)一个http POST请求,但是我收到了一个500内部服务器错误。网络服务向手机发送短信 - 我有一个帐户,我已经通过他们的网站成功测试,所以我知道我的“联系人列表”是有效的
他们的API文档需要以下内容:
标题:内容类型:application / json
数据:例如,要将“测试”消息发送到联系人ID“1111”,您将发布POST:
{
"contacts": [1111],
"text": "Testing"
}
这是我的代码返回500错误:
WebRequest MessageRequest;
WebResponse MessageResponse;
JavaScriptSerializer jsSer = new JavaScriptSerializer();
object JSONSerialized = new object();
string jsonString = @"{ ""contacts"":""ValidNumber"",""text"":""test text""}";
JSONSerialized = jsSer.Serialize(jsonString);
MessageRequest = WebRequest.Create(URL);
MessageRequest.Method = "POST";
MessageRequest.ContentType = "application/json";
using (var strWrt = new StreamWriter(MessageRequest.GetRequestStream()))
{
strWrt.Write(JSONSerialized);
strWrt.Close();
}
MessageResponse = MessageRequest.GetResponse();
//^^^This is the line that throws the 500 error.
return MessageResponse;
}
关于其请求的格式。我试过了
我在Write()和Close()之间尝试过strWrt.Flush(),但仍然出现500错误。
我已经尝试将json构建为Dictionary,将字符串作为带有strWrt.Write()的字节数组发送,以及我见过的其他建议,但所有这些都导致400 Bad Request错误。
另外,我尝试了许多格式化数据的变体。我意识到这个例子在电话号码周围有引号,并没有他们的文档中描述的括号,但我已经尝试了所有这些组合并总是得到500错误,所以我猜测我要么没有正确地将字符串转换为json对象,我没有正确地将json对象传递给MessageRequest - 或两者都没有。我发现的大多数解决方案都使用.Net 4.5对象,不幸的是,Web服务的支持根本没有帮助 - 他们只说“看起来你没有发送有效的json”
我已经坚持了一个星期 - 任何帮助都会非常赞赏。谢谢你的时间。
更新
我改为另一个SMS API,这是我第一次尝试的。虽然没有一个建议的解决方案适用于这个问题,但它对我来说并不重要,尽管我有点好奇为什么它从来没有奏效。
答案 0 :(得分:0)
您需要在[]之间的数组中包含元素(甚至只是一个),例如
{
"contacts":[{1111}], "text":"msg here"
}
答案 1 :(得分:0)
我认为您可能错过了您提供的API定义,即联系人以数字数组的形式传递
{ "contacts": [1234, 4321], "text": "hello" }
而不是单个字符串值
{ "contacts": "1234", "text": "hello" }
答案 2 :(得分:0)
我无法理解为什么在已经序列化对象时需要JavaScriptSerializer
?为什么不按原样传递它?现在看来你正在尝试两次序列化一些对象。请尝试以下代码:
WebRequest MessageRequest;
WebResponse MessageResponse;
string jsonString = @"{ ""contacts"":""ValidNumber"",""text"":""test text""}";
MessageRequest = WebRequest.Create(URL);
MessageRequest.Method = "POST";
MessageRequest.ContentType = "application/json";
using (var strWrt = new StreamWriter(MessageRequest.GetRequestStream()))
{
strWrt.Write(jsonString);
strWrt.Close();
}
MessageResponse = MessageRequest.GetResponse();
return MessageResponse;