Search code examples
c#resthttpwebclientfiddler

C# how to consume rest web service


I am having a problem when I try using a rest web service in C#.

When I try via Fiddler it works Ok. When I try via HTML/Ajax, it works Ok, as well.

When I try via C# (Console Application) I get an error.

This image is captured in fiddler. It is what I get when I try via ajax enter image description here

this image is also captured in fiddler. It is what I get when I try via C# enter image description here

As you can see, the JSON field is empty.

This is my C# code

            string json = JsonConvert.SerializeObject(abc);

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("MyURL");  //==> I am filling it correctly
        client.DefaultRequestHeaders.Accept.Add(
           new MediaTypeWithQualityHeaderValue("application/json"));

        var response = client.PostAsJsonAsync("MyMethod", json).Result; //==> I am filling my method correctly

But I have tried several others and always getting the same problem. (the code bellow is another one I tried)

var requisicaoWeb = WebRequest.CreateHttp("MyURL");
        requisicaoWeb.Method = "POST";
        requisicaoWeb.ContentType = "application/json";
        requisicaoWeb.ContentLength = dados.Length;
        requisicaoWeb.UserAgent = "Console app";
        requisicaoWeb.Accept = "Accept:application/json,text/javascript,*/*;q=0.01";


        //precisamos escrever os dados post para o stream
        using (var stream = requisicaoWeb.GetRequestStream())
        {
            stream.Write(MyJson, 0, dados.Length);
            stream.Close();
        }
        //ler e exibir a resposta
        using (var resposta = requisicaoWeb.GetResponse())
        {
            var streamDados = resposta.GetResponseStream();
            StreamReader reader = new StreamReader(streamDados);
            object objResponse = reader.ReadToEnd();
            var post = objResponse.ToString();//JsonConvert.DeserializeObject<Post>(objResponse.ToString());
            streamDados.Close();
            resposta.Close();
        }

Everything I try in C#, the JSON field on Fiddler is always empty and the "syntax View" description is always "Request Invalid".


Solution

  • Try it's;

    public static string HttpPost(string URI, string Parameters)
    {
        System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
    
        req.ContentType = "application/json; charset=utf-8";
        req.Method = "POST";
        req.Timeout = 600000;
        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
        req.ContentLength = bytes.Length;
        System.IO.Stream os = req.GetRequestStream();
        os.Write(bytes, 0, bytes.Length);
        os.Close();
        System.Net.WebResponse resp = req.GetResponse();
        if (resp == null)
            return null;
        System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
        return sr.ReadToEnd().Trim();
    }