简体   繁体   中英

Calling REST service from C# code

I am using the following code to call a REST service using C#

 string PostData= @"{""name"":""TestName""}";

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://something.com:1234/content/abc.v1.json");

        request.Method = "POST";
        request.ContentLength = 0;
        request.ContentType = ContentType;
        request.Accept = "application/json";
        request.KeepAlive = false;
        request.CookieContainer = cookie;

        if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);
            request.ContentLength = bytes.Length;
            request.AllowAutoRedirect = true;
            using (Stream writeStream = request.GetRequestStream())
            {
                writeStream.Write(bytes, 0, bytes.Length);
            }
        }

        try
        {  // Gets exception
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {

             ....
             }
        }

And I am getting an exception "400 bad request" on the line calling GetResponse() . The documentation of the service says the status code 400 means a required argument is missing. But as you can see the argument name (which is the only required argument ) is supplied with the request.

I tried to call the service with CURL and it successfully got executed.

curl -v -b cookie.txt -X POST -H "Content-Type: application/json" -d "{\\"name\\": \\"TestName\\"}" http://something.com:1234/content/abc.v1.json

So I assume there is something wrong with my C# code which doesn't seem to be passing the parameters. Any idea?

EDIT

Here is the relevant part of the documentation:

Method

POST

Headers

Content-Type: application/json

Body

The request body is made up of JSON containing the following properties:

Name : name Required : yes Type : string

Response Status codes

201 Created Success

400 Bad Request A required property is missing in the request body.

That's not how data is sent in a POST request. It should look like this:

string PostData= "name=TestName";

If you have more than one value, you separate them with the & character. Example:

string PostData= "name=TestName&number=20";

I suggest using the System.Net.Http HttpClient class.

        string PostData = @"{""name"":""TestName""}";

        var httpClientHandler = new HttpClientHandler();
        httpClientHandler.CookieContainer = cookies;
        var httpClient = new HttpClient(httpClientHandler);

        var content = new StringContent(PostData, 
            Encoding.GetEncoding("iso-8859-1"), "application/json");

        httpClient.PostAsync("http://something.com:1234/content/abc.v1.json", content);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM