.NET HttpClient. Как отправить строковое значение POST?

Как я могу создать с помощью C # и HttpClient следующий запрос POST: User-Agent: Fiddler Content-type: application / x-  www-form-urlencoded Хост: localhost: 6740 Content-Length: 6

Мне нужен такой запрос для моей службы WEB API:

[ActionName("exist")]
[HttpPost]
public bool CheckIfUserExist([FromBody] string login)
{           
    return _membershipProvider.CheckIfExist(login);
}

person Ievgen Martynov    schedule 02.03.2013    source источник
comment
Какой HTTP-клиент вы используете на изображении?   -  person brimstone    schedule 10.02.2016
comment
telerik.com/fiddler   -  person Ievgen Martynov    schedule 11.02.2016
comment
Сервис - это Web Api MVC. Формат JSON для запроса?   -  person Kiquenet    schedule 23.02.2018


Ответы (5)


Ниже приведен пример синхронного вызова, но вы можете легко перейти на асинхронный, используя await-sync:

var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("login", "abc")
            };

var content = new FormUrlEncodedContent(pairs);

var client = new HttpClient {BaseAddress = new Uri("http://localhost:6740")};

    // call sync
var response = client.PostAsync("/api/membership/exist", content).Result; 
if (response.IsSuccessStatusCode)
{
}
person cuongle    schedule 02.03.2013
comment
Я не думаю, что это сработает. вам следует заменить логин пустой строкой, это должна быть KeyValuePair ‹строка, строка› (, abc), см. принятый ответ. - person joedotnot; 28.02.2019
comment
это работает для меня, работайте над веб-сервисом php, который вызывает $ company_id = $ _POST (company_id); как это. Если я отправлю как json, php не сможет работать. - person TPG; 19.03.2020

Здесь я нашел эту статью, в которой отправляется почтовый запрос с использованием данных JsonConvert.SerializeObject() & StringContent() в HttpClient.PostAsync

static async Task Main(string[] args)
{
    var person = new Person();
    person.Name = "John Doe";
    person.Occupation = "gardener";

    var json = Newtonsoft.Json.JsonConvert.SerializeObject(person);
    var data = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    using var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;
    Console.WriteLine(result);
}
person Ravi Makwana    schedule 03.03.2020

На сайте asp.net есть статья по вашему вопросу. Надеюсь, это поможет тебе.

Как вызвать api с помощью asp net

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client.

Вот небольшая часть из раздела POST статьи

Следующий код отправляет запрос POST, содержащий экземпляр продукта в формате JSON:

// HTTP POST
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
response = await client.PostAsJsonAsync("api/products", gizmo);
if (response.IsSuccessStatusCode)
{
    // Get the URI of the created resource.
    Uri gizmoUrl = response.Headers.Location;
}
person oneNiceFriend    schedule 03.11.2015
comment
Запрос имеет кодировку формы, поэтому я не думаю, что JSON будет работать - person ChrisFletcher; 31.08.2017
comment
Это кодирование формы. В любом случае, формат JSON для DateTime свойств? проблемы с сериализацией? - person Kiquenet; 23.02.2018
comment
Кажется, я не замечаю ваш метод PostAsJsonAsync. Он недоступен в моем экземпляре HttpClient. - person Tommy Holman; 02.03.2018

Вы могли бы сделать что-то вроде этого

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6740/api/Membership/exist");

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";         
req.ContentLength = 6;

StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();

И тогда strReponse должен содержать значения, возвращаемые вашим веб-сервисом.

person Axel    schedule 02.03.2013
comment
Здесь вопрос заключался в том, как использовать новый HttpClient, а не старый WebRequest. - person Darin Dimitrov; 02.03.2013
comment
Правда не заметил, все равно оставлю пост, если кому-то понадобится старый ... - person Axel; 02.03.2013

person    schedule
comment
хм, у моего HttpClientExtensions такой перегрузки нет ... я использую framework 4.0 - person Ievgen Martynov; 02.03.2013
comment
Какой перегрузки у вас нет? Убедитесь, что вы установили в свой проект Microsoft.AspNet.WebApi.Client NuGet. Класс HttpClient построен в .NET 4.5, а не в .NET 4.0. Если вы хотите использовать его в .NET 4.0, вам понадобится NuGet! - person Darin Dimitrov; 02.03.2013
comment
Первый C # SSSCE, с которым я столкнулся. Как будто это было так просто запустить, если вы переходите с языка с правильной IDE. - person Buffalo; 01.04.2015
comment
Обратите внимание, что использование HttpClient в инструкции using является ошибкой. - person ren; 16.03.2017
comment
Вы должны использовать частный статический только для чтения HttpClient _client = new HttpClient (); вместо этого aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong < / а> - person Sameer Alibhai; 09.05.2017
comment
Результатом запроса является UrlEncoded Content, а не формат JSON? - person Kiquenet; 23.02.2018
comment
@Sameer хороший момент .. Я рекомендую всем проверить этот пост, это серьезное улучшение производительности. - person Rajshekar Reddy; 01.03.2018
comment
что, если бы я хотел использовать new KeyValuePair<string, string>("", "login" + someOtherString) - person greg; 19.03.2018