Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C-无法使用有效的JSON发送HTTP Post请求_C#_Json - Fatal编程技术网

C# C-无法使用有效的JSON发送HTTP Post请求

C# C-无法使用有效的JSON发送HTTP Post请求,c#,json,C#,Json,我有.NET4.0 我试图发送一个web服务,但我不控制带有头和数据的http POST请求,但我得到一个500内部服务器错误。网络服务向手机发送短信——我有一个账户,我已经通过他们的网站成功测试过了,所以我知道我的联系人名单是有效的 他们的API文档要求: 标题:内容类型:application/json 数据:例如,要将消息“Testing”发送到联系人id“1111”,您将发布: { "contacts": [1111], "text": "Testing" } 以下是返回500错误的

我有.NET4.0

我试图发送一个web服务,但我不控制带有头和数据的http POST请求,但我得到一个500内部服务器错误。网络服务向手机发送短信——我有一个账户,我已经通过他们的网站成功测试过了,所以我知道我的联系人名单是有效的

他们的API文档要求:

标题:内容类型:application/json

数据:例如,要将消息“Testing”发送到联系人id“1111”,您将发布:

{
"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;
    }
关于他们请求的格式。我试过了

我尝试过strWrt.Flush在写入和关闭之间运行,但仍然出现了500错误

我曾尝试将json构建为一个字典,使用strWrt.Write将字符串作为字节数组发送,以及我看到的其他建议,但所有这些都导致了400个错误请求

此外,我还尝试了多种格式化数据的方法。我意识到这个例子在电话号码周围有引号,没有他们文档中描述的括号,但我尝试了所有这些组合,总是得到500个错误,所以我猜我要么没有正确地将字符串转换为json对象,我没有正确地将json对象传递给MessageRequest,或者两者都没有。我发现的大多数解决方案都使用.NET4.5对象,不幸的是,web服务的支持一点帮助都没有——他们只是说看起来您没有发送有效的json

我已经被困在这个问题上一个星期了-任何帮助都将不胜感激。谢谢你抽出时间

更新:


我换了另一个SMS API,这是我第一次尝试时使用的。虽然建议的解决方案对这个问题都不起作用,但这对我来说已经不重要了,尽管我有点好奇为什么它不起作用

您需要将元素(例如数组中的一个元素)括在[]之间

{
  "contacts":[{1111}], "text":"msg here"
}

我认为您可能在API定义中遗漏了联系人作为数字数组传入的定义

{ "contacts": [1234, 4321], "text": "hello" }
而不是单个字符串值

{ "contacts": "1234", "text": "hello" }

我不明白,既然已经序列化了对象,为什么还需要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;

小提琴手是怎么告诉你的?我通常会将RestSharp用于此类代码,但我记得JavaScriptSerializer希望DTO具有与属性名称匹配的公共属性。谢谢-我如何将其传递给消息请求?我尝试了一个带有uint[]名为contacts和字符串名为text的对象,但出现了400错误。我还尝试了一个有两个keyvaluepairs的对象,命名为contacts和text,也得到了一个400错误。我尝试了这段代码,它抛出了一个400错误请求,