简单的REST请求c# - 错误

时间:2013-12-04 18:14:15

标签: c# json rest

我正在尝试向REST服务编写简单请求。请遵循REST服务提供商提供的文档:

  1. 我应该在标题Content-Type:application / json中使用。
  2. 以json格式的响应返回
  3. 对于授权进程,我必须使用API​​Key发送两个标头,使用API​​Sign
  4. 发送第二个标头

    REST服务中的控制器PING以测试代码。

    我使用.net 2.0

        string sha1String = APIKey + "/rest/ping" + APISecret;
    string XRestApiSign = SHA1HashStringForUTF8String(sha1String);
    string data = "";
    
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(restServer);
    request.Method = "POST";
    request.ContentType = "application/json";
    request.Headers.Add("X-Rest-ApiSign", XRestApiSign);
    request.Headers.Add("X-Rest-ApiKey", APIKey);
    
    request.ContentLength = data.Length;
    
    StreamWriter requestWriter;
    
    Stream webStream = request.GetRequestStream();
    using (requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII)) ;
    {
        requestWriter.Write(data);
    }
    
    request.BeginGetResponse((x) =>
    {
        using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(x))
        {
            List<string> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(response.GetResponseStream().ToString());
        }
    }, null);
    

    我应该得到响应字符串PONG但是我得到消息

      

    解析值时遇到意外的字符:S。路径'',第0行,第0位

    代码好吗?为什么我收到这条消息?

2 个答案:

答案 0 :(得分:2)

大多数情况都是这样,因为在服务器端生成JSON的脚本会将字节顺序标记添加到响应中。

但是,在您的情况下,您尝试将流转换为JSON,而不是流的内容。您需要从流中读取所有文本并从中反序列化该对象。您需要在流上调用其中一个读取内容的方法。

答案 1 :(得分:0)

我用你的建议修改了我的代码并且它有效。现在我遇到发送数据的问题:)

 Subscription user1 = new Subscription
 {
     Email = "kubaIt@test.com.pl",
     List  = "xfct2bjcdv",
 };

 List<Subscription> user = new List<Subscription>();
 user.Add(user1);

string json = JsonConvert.SerializeObject(user);
string data = json;

我在上面添加了。其他代码是一样的。我收到错误:请求已中止:请求已取消。“

json = [{\“email \”:\“kubaIt@test.com.pl \”,\“list \”:\“xfct2bjcdv \”}] //来自debuger的值