1

I am having a problem in passing parameters to webservice which except POST data in JSON. I am using HttpWebRequest for this, following is the code i have tried so far, but everytime server returns any of these two errors:

Error 1:

{"command":null,"handle":null,"code":2003,"msg":"Required parameter missing","error":["Parameter 'login_handle' missing.","Parameter 'login_pass' missing."],"params":{"0":{"Key":"login_handle","Value":"test"},"1":{"Key":"login_pass","Value":"test"},"handle":"example.com"},"svTRID":null,"response":[]}

Error 2:

{"command":null,"handle":null,"code":2400,"msg":"Command failed","error":["Internal Server Error. resulted in the following error: array_key_exists() [<a href='function.array-key-exists'>function.array-key-exists<\/a>]: The second argument should be either an array or an object"],"params":[],"svTRID":null,"response":[],"children":[{"command":"Internal Server Error.","handle":null,"code":2400,"msg":"Command failed","error":["array_key_exists() [<a href='function.array-key-exists'>function.array-key-exists<\/a>]: The second argument should be either an array or an object"],"params":{"errno":2,"errstr":"array_key_exists() [<a href='function.array-key-exists'>function.array-key-exists<\/a>]: The second argument should be either an array or an object","errfile":"\/home\/ote\/httpapi\/v1\/index.php","errline":54},"svTRID":null,"response":[]}]}

Here is the code:

try
            {
                ASCIIEncoding encoding = new ASCIIEncoding();


                Dictionary<string, string> data = new Dictionary<string, string>();
                data["login_handle"] = "test";
                data["login_pass"] = "test";               


                System.Net.WebRequest webReq = System.Net.WebRequest.Create(url);
                webReq.Method = "POST";
                webReq.ContentType = "application/json; charset=utf-8";
                DataContractJsonSerializer ser = new DataContractJsonSerializer(data.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, data);
                String json = Encoding.UTF8.GetString(ms.ToArray());
                StreamWriter writer = new StreamWriter(webReq.GetRequestStream()); 
                writer.Write(json); 
                writer.Close();

                System.Net.WebResponse webResp = webReq.GetResponse();
                System.IO.StreamReader sr = new System.IO.StreamReader(webResp.GetResponseStream());
                string s = sr.ReadToEnd().Trim();
            }
            catch (Exception ex)
            {
                string e = ex.Message;
            }

If i use string data = "[login_handle:'username',login_pass:'password']"; instead of Dictionary<string, string> , i receive error number 2.

2 Answers 2

2

Never mind, i solved it myself, instead of using Dictionary type i used anonymous type like this var data = new { login_handle = "test", login_pass = "test" }; and it solved my problem.

Sign up to request clarification or add additional context in comments.

Comments

0

What you should have done is create a DataContract class (we'll call JsonData) which has two DataMembers named login_handle and login_pass.

Then, in the DataContractJsonSerializer, pass typeof(JsonData) to the constructor.

This solution is the best because you cannot create complex types using an anonymous type. Also, by parenting your DataContracts you can easily create complex JSON.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.