【发布时间】:2014-01-16 01:59:51
【问题描述】:
我有 .Net 4.0。
我正在尝试向 Web 服务(我无法控制)发送带有标头和数据的 http POST 请求,但我收到 500 内部服务器错误。网络服务向手机发送短信 - 我有一个通过他们的网站成功测试过的帐户,所以我知道我的“联系人列表”是有效的
他们的 API 文档要求如下:
标题:内容类型:应用程序/json
数据:例如,要将消息“Testing”发送到联系人 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 构建为字典,使用 strWrt.Write() 将字符串作为字节数组发送,除此之外我还看到了一些建议,但所有这些都导致了 400 Bad Request 错误。
另外,我尝试了许多格式化数据的变体。我意识到这个例子在电话号码周围有引号,并且没有他们文档中描述的括号,但是我已经尝试了所有这些组合并且总是得到 500 错误,所以我猜测我要么没有正确地将字符串转换为 json 对象,要么没有将 json 对象正确地传递给 MessageRequest - 或两者兼而有之。我发现的大多数解决方案都使用 .Net 4.5 对象,不幸的是,Web 服务的支持根本没有帮助 - 他们只是说“看起来你没有发送有效的 json”
我已经坚持了一周 - 任何帮助都会非常感激。感谢您的宝贵时间。
更新:
我改用另一个在我第一次尝试时工作的 SMS API。尽管建议的解决方案都不适用于这个问题,但这对我来说不再重要了,尽管我有点好奇为什么它从来没有奏效。
【问题讨论】:
-
fiddler (fiddler2.com) 告诉你什么正在走线?对于这种代码,我通常会使用 RestSharp,但我记得 JavaScriptSerializer 需要一个具有与属性名称匹配的公共属性的 DTO。