bugfix> c# > 投稿

APIに投稿するためにcURLを使用すると、100%動作します。ボタンがクリックされたときに同じようにする必要があるC#でデスクトップアプリケーションを構築しました。フィドラーを介してコードをキャプチャすると、正常に接続されているが、このエラーが表示されます: {「致命的」:「POSTパラメータなし!」}

Postmanを使用してテストすると、同じエラーが表示されます。

{「致命的」:「POSTパラメータなし!」}

これは動作する私のcURLスクリプトです:

curl -u username: "password" -X POSThttp://localhost/api/index.php -d method = "addSubscriber" -d first_name = "test" -d last_name = "account" -d address = "980 westlane、Khomasdal" -d postcode = "999 Windhoek" -d country = "Namibia" -d email = "test@gmail.com" -d mobile_number = "26487222225" -d package [package_uid] [] = "live" -d package [package_uid] [] = "timeshift" -d package [valid_from] [] = "2018- 05-24 "-d package [valid_from] [] =" 2018-05-24 "-d package [duration] [] =" 31 "-d package [duration] [] =" 31 "

これはC#の私のコードです:HttpWebRequestを使用しています:

       HttpWebRequest webRequest;
        webRequest = (HttpWebRequest)WebRequest.Create("http://localhost/api/index.php");
        String authHeaer = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(userName + ":" + userPassword));
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        string requestParams = "{\"method\" : \"addSubscriber\",\"first_name\" : '"+txt_fname.Text+"', \"last_name\" : \"'"+txt_lname.Text+"'\", \"address\":\"default\", \"postcode\":\"0000\", \"country\" : \"Namibia\", \"email\" :\"'"+txt_email.Text+"'\", \"mobile_number\" : \"'"+txt_cellno.Text+"'\", \"package_uid\" : \"live\", \"package_valid_from\" : \"'"+DateTime.Now+"'\", \"package_duration\" : \"'"+txtDuration.Text+"'\"}"; //format information you need to pass into that string ('info={ "EmployeeID": [ "1234567", "7654321" ], "Salary": true, "BonusPercentage": 10}');
        webRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + authHeaer;
        byte[] byteArray = Encoding.UTF8.GetBytes(requestParams);
        webRequest.ContentLength = byteArray.Length;
        using (Stream requestStream = webRequest.GetRequestStream())
        {
            requestStream.Write(byteArray, 0, byteArray.Length);
        }
        // Get the response.
        using (WebResponse response = webRequest.GetResponse())
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader rdr = new StreamReader(responseStream, Encoding.UTF8);
                string Json = rdr.ReadToEnd(); // response from server
            }
        }
        MessageBox.Show("Client Added Succesfully");

回答 1 件
  • コンテンツタイプをjsonからurlencodedに変更し、ビットの形式を変更すると、必要な出力を得ることができました。

    以下が新しいコードです。

    HttpWebRequest webRequest;             webRequest =(HttpWebRequest)WebRequest.Create( "http://197.188.246.11/megatel/api/v1/index.php");             文字列authHeaer = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(userName + ":" + userPassword));

           webRequest.Method = WebRequestMethods.Http.Post;
            //"POST";
            webRequest.Accept= "application/x-www-form-urlencoded"; 
            webRequest.ContentType = "application/x-www-form-urlencoded";
            string requestParams = "method=addSubscriber&first_name=" + txt_fname.Text +"&last_name=" + txt_lname.Text + "&address=" + txt_City.Text + "&postcode=" + txt_POBOX.Text + "&country=Brazil&email=" + txt_email.Text + "&mobile_number=" + txt_cellno.Text + "&package%5Bpackage_uid%5D%5B%5D=live&package%5Bpackage_uid%5D%5B%5D=timeshift&package%5Bvalid_from%5D%5B%5D=" + DateTime.Now.ToString("yyyy-MM-dd") + "&package%5Bvalid_from%5D%5B%5D=" + DateTime.Now.ToString("yyyy-MM-dd") + "&package%5Bduration%5D%5B%5D=" + txtDuration.Text + "&package%5Bduration%5D%5B%5D=" + txtDuration.Text + "";
            webRequest.Headers[HttpRequestHeader.Authorization] = "Basic " + authHeaer;
            byte[] byteArray = Encoding.UTF8.GetBytes(requestParams);
            webRequest.ContentLength = byteArray.Length;
            using (Stream requestStream = webRequest.GetRequestStream())
            {
                requestStream.Write(byteArray, 0, byteArray.Length);
            }
            // Get the response.
            using (WebResponse response = webRequest.GetResponse())
            {
                using (Stream responseStream = response.GetResponseStream())
                {
                    StreamReader rdr = new StreamReader(responseStream,Encoding.UTF8);
                    string Json = rdr.ReadToEnd();
                }
            }
    
    

あなたの答え