2012-04-12 51 views
2

我收到远程服务器在尝试运行我的代码时返回错误:(400)错误的请求错误。任何帮助,将不胜感激。谢谢。如何解决400错误请求错误?

// Open request and set post data 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("myurl.com/restservice/Login"); 
    request.Method = "POST"; 
    request.ContentType = "application/json; charset:utf-8"; 
    string postData = "{ \"username\": \"testname\" },{ \"password\": \"testpass\" }"; 

    // Write postData to request url 
    using (Stream s = request.GetRequestStream()) 
    { 
     using (StreamWriter sw = new StreamWriter(s)) 
      sw.Write(postData); 
    } 

    // Get response and read it 
    using (Stream s = request.GetResponse().GetResponseStream()) // error happens here 
    { 
     using (StreamReader sr = new StreamReader(s)) 
     { 
      var jsonData = sr.ReadToEnd(); 
     } 
    } 

JSON编辑

更改为:

{ \"username\": \"jeff\", \"password\": \"welcome\" } 

但仍然没有工作。

编辑

这是我发现的工作原理:

 // Open request and set post data 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("myurl.com/restservice/Login"); 
    request.Method = "POST"; 
    request.ContentType = "application/json"; 
    string postData = "{ \"username\": \"testname\", \"password\": \"testpass\" }"; 

    // Set postData to byte type and set content length 
    byte[] postBytes = System.Text.UTF8Encoding.UTF8.GetBytes(postData); 
    request.ContentLength = postBytes.Length; 

    // Write postBytes to request stream 
    Stream s = request.GetRequestStream(); 
    s.Write(postBytes, 0, postBytes.Length); 
    s.Close(); 

    // Get the reponse 
    WebResponse response = request.GetResponse(); 

    // Status for debugging 
    string ResponseStatus = (((HttpWebResponse)response).StatusDescription); 

    // Get the content from server and read it from the stream 
    s = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(s); 
    string responseFromServer = reader.ReadToEnd(); 

    // Clean up and close 
    reader.Close(); 
    s.Close(); 
    response.Close(); 
+0

为什么你在使用Streams?请改用['WebClient'](http://msdn.microsoft.com/zh-cn/library/system.net.webclient.aspx)! – qJake 2012-04-12 20:40:31

+0

WebClient是一个好主意。但是请注意,400请求通常表示服务器不理解您的请求。坏的负载是可能的罪魁祸首,尤其是因为你似乎有不正确的JSON。 – yamen 2012-04-12 20:43:45

回答

4

可以尝试string postData = "[{ \"username\": \"testname\" },{ \"password\": \"testpass\" }]";

您发送2个对象

编辑所组成的数组方式:也许你真的想发送什么只是有2个属性的对象,那么这将是string postData = "{ \"username\": \"testname\", \"password\": \"testpass\" }"

+3

如果数据无效,许多REST服务会返回HTTP 400,例如Viamenete和Palletways – rastating 2012-04-12 20:42:32

+0

问题可能是** postData **吗?它看起来像是从字面上发送\斜杠。 – 2012-04-12 20:51:57

+0

我不认为这会是一个问题,他们只是逃避角色..你在哪里看到这些斜杠被发送? – jorgehmv 2012-04-12 20:58:31

0

看起来好像它可能从您发布,因为它是无效的,请参阅下面你要发送什么,但在一个有效的形式JSON现身:

{ 
    "username": "testname", 
    "password": "testpass" 
} 
+0

正如我在其他评论中所说的,如果数据无效,许多REST服务会返回HTTP 400,例如Viamenete和Palletways。我今天刚刚开始使用基于HTTP的Web服务来完成同样的事情。 – rastating 2012-04-12 20:43:26