1. ホーム
  2. c#

[解決済み] HttpWebRequest-リモートサーバーがエラーを返しました。(400) 不正なリクエスト

2022-02-17 02:45:13

質問

The remote server returned an error.が表示されます。(400) Bad Request エラーを返しました。 私は、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();
        }
    }`

解決方法は?

PUTではなくPOSTで間違いないですか?

POSTは通常 application/x-www-urlencoded の形式を使用します。もしREST APIを使用しているのであれば、PUTを使用すべきかもしれません。ファイルをアップロードする場合は、おそらく multipart/form-data . 常にというわけではありませんが、通常は、これが正しい方法です。

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