C # как использовать отдых веб-сервис - PullRequest
0 голосов
/ 24 сентября 2018

У меня проблема, когда я пытаюсь использовать отдыхающий веб-сервис в C #.

Когда я пытаюсь через Fiddler, он работает нормально.Когда я пытаюсь через HTML / Ajax, он тоже работает нормально.

Когда я пытаюсь через C # (консольное приложение), я получаю сообщение об ошибке.

Это изображение захвачено в скрипаче.Это то, что я получаю, когда пытаюсь через ajax enter image description here

это изображение также захватывается в скрипач.Это то, что я получаю, когда пытаюсь через C # enter image description here

Как видите, поле JSON пусто.

Это мой код C #

            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

Но я пробовал несколько других и всегда получал одну и ту же проблему.(ниже приведен код, который я пробовал)

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();
        }

Все, что я пробую в C #, поле JSON в Fiddler всегда пустое, а описание «синтаксического представления» всегда «Запрос недействителен».

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я только что понял.

Если у кого-то еще есть такая же проблема, вот ответ

 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 stringContent = new StringContent(JsonConvert.SerializeObject(abc), Encoding.UTF8, "application/json"); 

        var response = client.PostAsync("MyURL", stringContent).Result; //==> I am filling my method correctly
0 голосов
/ 24 сентября 2018

Попробуйте это;

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();
}
...