2012-04-12 10 views
2

私はを取得していますリモートサーバーはエラーを返しました:(400)不正なリクエスト私のコードを実行しようとするとエラーが発生しました。どんな助けもありがとう。ありがとう。400 Bad Requestエラーを修正するには?

{ \"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; 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のEDIT

EDIT

これは、私はそれが働く見つけたものです:

 // 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/en-us/library/system.net.webclient.aspx)を使用してください! – qJake

+0

WebClientは良いアイデアです。しかし、400リクエストは、通常、リクエストを理解していないサーバーを示します。悪いペイロードは、特にあなたが間違ったJSONを持っているように見えるので、おそらく原因です。 – yamen

答えて

4

は、あなたが2つのオブジェクト

編集の配列を送信していること方法string postData = "[{ \"username\": \"testname\" },{ \"password\": \"testpass\" }]";

を試すことができます:本当にあなたが送信したいものそれはJSONから来ることもあるかのように、それが無効であるとして、それはあなたが送信しているものを下回ったが、有効な形で見、あなたが投稿しているに見える、それはstring postData = "{ \"username\": \"testname\", \"password\": \"testpass\" }"

+3

多くのRESTサービスは、ViameneteやPalletwaysなどのデータが無効な場合にHTTP 400を返します – rastating

+0

問題は** postData **ですか?文字通り\スラッシュを送信しているようです。 –

+0

私はそれが単なるエスケープ文字であるとは思えません。スラッシュはどこに送られていますか? – jorgehmv

0

なり、2つのプロパティを持つだけのオブジェクトです:

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

他のコメントで述べたように、ViameneteやPalletwaysなどのデータが無効な場合、多くのRESTサービスはHTTP 400を返します。私は今日、まったく同じことを行うHTTPベースのWebサービスを使って作業しています。 – rastating

1

POSTDATAは有効なJSONオブジェクト

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

Json.NetのようなJSONパーサーを使用しようと、JavaScriptSerializerまたはDataContractJsonSerializerの代わりに、手動で

それを形成していません10
関連する問題