使用POST方法调用API时我得到错误(致命没有参数)

时间:2018-05-24 23:51:41

标签: c# curl httpwebrequest

当我使用cURL发布到我的API时,它100%工作,我在C#中构建一个桌面应用程序,当单击一个按钮时需要相同。当我通过fiddler捕获我的代码时,它显示已成功连接但是给了我这个错误: {“致命”:“没有POST params!”}

当我使用Postman测试我得到同样的错误:

{“致命”:“没有POST params!”}

这是我的cURL脚本:

curl -u用户名:“密码”-X POST http://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 个答案:

答案 0 :(得分:0)

我将内容类型从json更改为urlencoded,并更改了一点格式,我可以获得所需的输出。

以下是新代码:

HttpWebRequest webRequest;             webRequest =(HttpWebRequest)WebRequest.Create(" http://197.188.246.11/megatel/api/v1/index.php");             String 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();

            }
        }