web-dev-qa-db-ja.com

HttpWebRequest-リモートサーバーがエラーを返しました:(400)Bad Request

リモートサーバーからエラーが返されました:(400)Bad Request error while running the following code。 HTTPサーバーにxmlファイルをアップロードしようとしています。私のxmlファイルにはユーザー名、パスワード、ドメインのタグが含まれており、接続しようとすると手動で接続できますが、このコードを介して接続しようとするときに同じ資格情報を使用すると、400 Bad Requestエラーが発生します。この問題を克服する方法を教えてください。ありがとう

  public static void UploadHttp(string xml)     
    {

        string txtResults = string.Empty;
        try
        {
            string url = "http://my.server.com/upload.aspx ";
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.KeepAlive = false;
            request.SendChunked = true;
            request.AllowAutoRedirect = true;
            request.Method = "Post";
            request.ContentType = "text/xml";
            var encoder = new UTF8Encoding();
            var data = encoder.GetBytes(xml);
            request.ContentLength = data.Length;
            var reqStream = request.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();
            WebResponse response = null;
            response = request.GetResponse();
            var reader = new StreamReader(response.GetResponseStream());
            var str = reader.ReadToEnd();
        }
        catch (WebException ex)
        {
            if (ex.Status == WebExceptionStatus.ProtocolError)
            {
                HttpWebResponse err = ex.Response as HttpWebResponse;
                if (err != null)
                {
                    string htmlResponse = new StreamReader(err.GetResponseStream()).ReadToEnd();
                    txtResults = string.Format("{0} {1}", err.StatusDescription, htmlResponse);
                }
            }
            else
            {

            }
        }
        catch (Exception ex)
        {
            txtResults = ex.ToString();
        }
    }`
8
user1301587

POST not PUTを使用する必要がありますか?

通常、POSTはapplication/x-www-urlencoded形式で使用されます。 REST APIを使用している場合は、PUTを使用する必要がありますか?ファイルをアップロードする場合は、おそらくmultipart/form-dataを使用する必要があります。正しいこと..

また、ログインに資格情報を使用していないようです-HttpWebRequestオブジェクトのCredentialsプロパティを使用して、ユーザー名とパスワードを送信する必要があります。

11
Ben

認証エントリが正しくないため、400 Bad request Errorがスローされます。

  1. API URLが正しいか間違っているかを確認してください。スペースを追加または追加しないでください。
  2. ユーザー名とパスワードが有効であることを確認してください。入力中にスペルミスをチェックしてください。

注:主にスペル変更による不正な認証エントリが原因で、400 Bad requestが発生します。

3
tamil

どのタイプの認証を使用しますか?前にBenが言ったプロパティを使用して資格情報を送信し、Cookieハンドラーをセットアップします。すでにリダイレクトを許可しています。リダイレクトが発生した場合は、Webサーバーを確認してください(NTLM認証は確実に行います)。リダイレクションがある場合、セッションCookieにほとんど保存されているセッションを保存する必要があります。

0
YvesR