.NET HttpClient. 문자열 값을 POST하는 방법?


174

C # 및 HttpClient를 사용하여 다음 POST 요청을 작성하는 방법 사용자 에이전트 : Fiddler 콘텐츠 유형 : application / x-www-form-urlencoded 호스트 : localhost : 6740 콘텐츠 길이 : 6

WEB API 서비스에 대한 요청이 필요합니다.

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

1
이미지에서 어떤 HTTP 클라이언트를 사용하고 있습니까?
유황


1
이 서비스는 Web Api MVC입니다. 요청을위한 JSON 형식 ?
Kiquenet

답변:


433
using System;
using System.Collections.Generic;
using System.Net.Http;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => MainAsync());
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:6740");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("", "login")
            });
            var result = await client.PostAsync("/api/Membership/exists", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }
}

1
흠, 내 HttpClientExtensions는 이러한 과부하가 없습니다 ... 나는 프레임 워크 4.0을 사용
Ievgen Martynov

1
어떤 과부하가 없습니까? Microsoft.AspNet.WebApi.Client프로젝트에 NuGet을 설치했는지 확인하십시오 . 이 HttpClient클래스는 .NET 4.0이 아닌 .NET 4.5에 빌드되었습니다. .NET 4.0에서 사용하려면 NuGet!
Darin Dimitrov

1
처음으로 C # SSSCE를 만납니다. 적절한 IDE를 가진 언어에서 온다면 실행하기가 매우 쉬워졌습니다.
버팔로

13
명령문을 사용할 때 HttpClient를 사용하는 것은 실수입니다
ren

26
정적 읽기 전용이어야합니다. HttpClient _client = new HttpClient (); 대신 aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
Sameer Alibhai

35

다음은 동 기적으로 호출하는 예이지만 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)
{
}

1
나는 이것이 효과가 없을 것이라고 생각한다. "로그인"을 빈 문자열로 바꾸어야합니다. KeyValuePair <string, string> ( "", "abc") 여야합니다. 허용 된 답변을 참조하십시오.
joedotnot

이것은 나를 위해 작동합니다. $ company_id = $ _POST ( "company_id"); 그렇게 json으로 보내면 PHP가 작동하지 않습니다.
teapeng

8

asp.net 웹 사이트에 질문에 대한 기사가 있습니다. 나는 그것이 당신을 도울 수 있기를 바랍니다.

ASP Net을 사용하여 API를 호출하는 방법

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

다음은 기사의 POST 섹션에서 나온 작은 부분입니다.

다음 코드는 JSON 형식의 Product 인스턴스가 포함 된 POST 요청을 보냅니다.

// 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;
}

이 요청은 내가 JSON이 작동합니다 생각하지 않도록 폼 urlencode되고있다
ChrisFletcher

그것은의 형태-urlencoded를 . 어쨌든, JSON 형식 에 대한 DateTime속성? 직렬화 문제?
Kiquenet

4
"PostAsJsonAsync"메소드를 인식하지 못하는 것 같습니다. HttpClient 인스턴스에서 사용할 수 없습니다.
Tommy Holman

4

여기 내가 사용 후 요청을 보낼 수있다이 문서 발견 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);
}

1

이런 식으로 할 수 있습니다

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에는 웹 서비스에서 반환 한 값이 포함되어야합니다


25
여기서 의문은 새로운 HttpClient것이 아닌 오래된 것을 사용하는 방법에 관한 것이었다 WebRequest.
Darin Dimitrov

사실 나는 눈치 채지 못했다. 누군가가 오래된 것을 필요로 할 경우를 대비하여 포스트를 남겨둔다.
Axel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.