Как отправить POST json из С# в asp.net web api

Как можно сделать запрос POST для ASP.Net web api из С#. Я использовал файлы DLL Newtonsoft для создания json, но я не могу отправить его в api.

Мой код:

        Login login = new Login
        {
            userid = username.Text,
            pass = pass.Text
        };
        string json = JsonConvert.SerializeObject(login, Formatting.Indented);

Как отправить этот json в web api и получить ответ?

Изменить

string url = "myurl";


        var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.ContentType = "application/json; charset=utf-8";
        httpWebRequest.Method = "POST";
        httpWebRequest.Accept = "application/json; charset=utf-8";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {

            json = json.Replace("\r\n","");
            //json = json.Replace("\",", "\","   + "\"" +"\u002B");
            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            pass.Text = result.ToString();
        }

Ответ 1

Я сделал это, сделав несколько изменений. Вместо того, чтобы напрямую сериализовать json-объект, я использовал класс и присвоил ему значения, и сериализовал его с помощью JavaScriptSerializer. Спасибо за вашу помощь Шекхара.

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.ContentType = "application/json; charset=utf-8";
        httpWebRequest.Method = "POST";
        httpWebRequest.Accept = "application/json; charset=utf-8";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string loginjson = new JavaScriptSerializer().Serialize(new
            {
                userid = username.Text,
                password = pass.Text
            });

            streamWriter.Write(loginjson);
            streamWriter.Flush();
            streamWriter.Close();

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                pass.Text = result.ToString();
            }
        }

Ответ 2

Вы можете использовать класс HttpWebRequest для создания запроса и использовать StreamWriter, чтобы написать Json с запросом и, наконец, получить HttpWebResponse из веб-API.

var httpWebRequest = (HttpWebRequest)WebRequest.Create("path/api");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
   streamWriter.Write(json);
   streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

Ответ 3

Reg: "Как отправить этот JSON в Web API и получить ответ?"

Все существующие текущие ответы на ваш вопрос используют .NET WebRequest; это супер разочаровывающая библиотека для работы. Я хотел бы предложить самый простой & наиболее краткий способ "отправки JSON в Web API".

Открытый исходный код для спасения. В качестве альтернативы есть три отличных бесплатных библиотеки NuGet с открытым исходным кодом. Слава Богу! Все они хорошо поддерживаются, документируются и с ними легко работать.

  • ServiceStack.Text - быстро, легко и надежно.
  • RestSharp - простой клиент API REST и HTTP
  • Flurl - свободная, портативная, тестируемая клиентская библиотека HTTP

Между ними не так много, но я бы дал ServiceStack.Text небольшое преимущество...

  • Звезды Github примерно одинаковы.
  • Открытые проблемы & главное как быстро какие-то проблемы закрылись? ServiceStack получает здесь награду за самое быстрое решение проблемы и усиление. нет открытых вопросов.
  • Документация? У всех есть отличная документация; однако ServiceStack выводит его на следующий уровень & ‘Золотой стандарт документации.

Хорошо, так как же выглядит Post Post в JSON в ServiceStack.Text?

var response = "http://example.org/login"
    .PostJsonToUrl(new Login { Userid="admin", Password="mypassword" });

Это одна строка кода. Краткий легко! Сравните строку кода с чрезмерно сложным WebRequest