HttpContent 사용 방법을 찾을 수 없습니다


186

사용하려고합니다 HttpContent:

HttpContent myContent = HttpContent.Create(SOME_JSON);

...하지만 DLL이 정의되어있는 곳을 찾지 못했습니다.

첫째, 참조를 추가하는 시도 Microsoft.Http뿐만 아니라 System.Net,하지만 목록에 둘 수 없습니다. 또한 참조를 추가하려고 System.Net.Http했지만 HttpContent클래스를 사용할 수 없습니다.

HttpContent수업을 어디서 찾을 수 있습니까?

답변:


-7

클래스 System.Net.Http 어셈블리 에있는 것으로 표시됩니다 . 이 클래스는 .NET 4.5의 새로운 기능이므로 해당 버전의 BCL을 사용해야합니다.


2
NuGet의 Microsoft.NET.Http 패키지를 통해 .NET 4에서도 사용할 수 있습니다.
Panagiotis Kanavos

121
까다 롭고 질문이 있지만, 이것은 경쟁 답변이 아닌가? 물론 System.Net.Http에 HttpContent가 포함되어 있습니다. 그러나 HttpContent에는 Create 메소드가 없습니다. StringContent와 같은 파생 클래스 중 하나 ( pfelix.wordpress.com/2012/01/16/… ) 를 사용해야 합니다. 예 : 새로운 StringContent (SOME_JSON)
6footunder,

13
@ 6footunder 전혀 까다 롭지 않습니다.이 답변은 정확하지 않습니다.
Aran Mulholland

적절한 예를 보려면 아래에서 Youngjae의 답변을 볼 수 있습니다. stackoverflow.com/a/24474664/21539
Zain Rizvi

8
이 답변은 하지 주소에게 OP의의 의도 원래 내주의 깊게 읽어에서 묻는 질문 단지 를 Where HttpContent클래스가 발견 될 수 있습니다. (또한 OP가이 답변을 수락했음을 참고하십시오.) OP에 두 번째 시간 이 있었을뿐입니다. (의 인스턴스를 생성하려고 문제 HttpClient가능성까지 영업 이익 분명하지 않았다) DLL을 참조 문제가 해결되었다. 여기에 대한 답변 중 일부는 두 번째 문제를 해결하고 많은 사람들이 그 답변이 유용하다는 것을 알았습니다. 마지막으로 질문을 명확하게하기 위해 OP의 원본 텍스트를 기반으로 질문을 편집했습니다.
DavidRR

374

그냥 사용하십시오 ...

var stringContent = new StringContent(jObject.ToString());
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

또는,

var stringContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

content 매개 변수는 StringContent가 아니라 IHttpContent 여야한다고 말합니다. 인터페이스에 캐스트하면 행복합니다.
micahhoover

3
HttpStringContent를 사용하여 종료되었습니다. PostAsync (또는 필자의 경우 PutAsync)는 IHttpContent 객체로 캐스팅하더라도 StringContent를 허용하지 않기 때문에 StringContent 클래스를 사용할 수 없습니다.
micahhoover

4
StringContent는 PostAsync와 함께 작동하지만 HttpContent를 원하거나 사용해야하는 경우 다음과 같이 할 수 있습니다. HttpContent content = new StringContent (jsonString);
Chris Koester

나는 내 것과 비슷한 문제로 보이는 것에 대한이 답변을 계속보고 있지만 두 API를 모두 디버깅 할 때 PostAsync ( "path", StringContent)가 발생하지만 다른 API에 부딪 칠 때 나는 그렇지 않습니다. 파싱하고 사용하기 위해 몸을 가지고 돌아 왔을 때 500을 얻습니다 ... 나는 이처럼 그렇게하고있는 것처럼 나는 상실합니다. 차이점은 첫 번째 API에서 객체를받을 때 이미 직렬화되어 있으며 간단한 통과이므로 객체를 직렬화하지 않는다는 것입니다.
슬래그 모스

이것이 답이되어야합니다 : /
DanielV 11/27/19

148

6footunder의 의견을 받아 답변으로 바꾸려면 HttpContent추상적이므로 파생 클래스 중 하나를 사용해야합니다.

여기에 이미지 설명을 입력하십시오


5
Visual Studio의 "클래스 다이어그램"기능을 사용한 것 같습니다 (프로젝트를 마우스 오른쪽 단추로 클릭하고 항목 추가, 클래스 다이어그램을 클릭 한 다음 솔루션 탐색기를 통해 참조를 확장하여 참조하는 라이브러리의 다이어그램을 얻을 수 있음) docs.microsoft.com/ko -us / visualstudio / ide /…
Arin

77

JSON Post의 경우 :

var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

비 JSON :

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("field1", "value1"),
    new KeyValuePair<string, string>("field2", "value2"),
});
var response = await httpClient.PostAsync("http://www.sample.com/write", stringContent);

https://blog.pedrofelix.org/2012/01/16/the-new-system-net-http-classes-message-content/


"json이 아닌"예제를 사용하려고합니다. 수신 측의 데이터를 어떻게 읽어야합니까?

var contents = 응답을 기다립니다 .Content.ReadAsStringAsync ();
Felipe Deveza


0

코드가 System.Net.Http.HttpContent 클래스를 사용하지 않고 대신 Microsoft.Http.HttpContent를 사용하고 있다고 확신합니다. Microsoft.Http는 WCF REST 스타터 키트로 .NET Framework에 배치하기 전에 미리 보지 않았습니다. 여전히 여기에서 찾을 수 있습니다 : http://aspnet.codeplex.com/releases/view/24644

새로운 코드를 작성하는 것은 권장하지 않습니다.


0

System.Net.Http네임 스페이스 ( HttpContent클래스가 상주)에 새로운 닷넷 4.5 , 당신은 VS2012 RC를 사용하고 있습니까?

그렇지 않으면, 당신은 이것에 액세스 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.