C #에서 system.net.webrequest를 사용하여 JSON 응답을 얻는 방법은 무엇입니까?


80

외부 도메인에서 json 데이터를 가져와야합니다. 웹 요청을 사용하여 웹 사이트에서 응답을 얻었습니다. 코드는 다음과 같습니다.

var request = WebRequest.Create(url);
string text;
var response = (HttpWebResponse) request.GetResponse();

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
}

누구든지 내가 json 데이터를 얻을 수없는 이유를 알고 있습니까?


아무도 내가 json 데이터를 얻을 수없는 이유를 알고 있습니까?
h3n

6
당신은 필요합니다 using (var response = request.GetResponse()){ ... }. 문제를 해결할 수는 없지만 리소스 누수를 줄일 수 있습니다.
John Saunders

답변:


67

콘텐츠 유형을 명시 적으로 요청해야합니다.

다음 줄을 추가하십시오.

 request.ContentType = "application/json; charset=utf-8";
적절한 장소에서


이 요청과 함께 매개 변수를 전달할 수 있습니까 ??
Jidheesh Rajan

7
Request Content-Type은 요청 본문의 유형을 설명합니다. 데이터가 서버로 전송되는 형식을 서버에 알리는 데 사용됩니다. 콘텐츠 유형의 응답과는 관련이 없습니다. 클라이언트는 Accept헤더를 사용하여 특정 유형으로 응답하도록 요청할 수 있지만 서버는 다른 이유로이를 무시할 수 있습니다.
temoto


나는 이것이 오래된 대답이라는 것을 알고 있지만 완전성을 위해 @SHEKHARSHETE에 답장하고 싶었습니다. 당신을 위해 일할 훌륭한 NewtonSoft JSON.Net과 같은 것을 사용할 수 있으며 여기에서 운동하는 방법에 대한 유용한 가이드를 읽는 것이 좋습니다. newtonsoft.com/json
타히르 칼리드

73

일부 API 는 원하는 응답 유형을 가져 오기 위해 요청에 적절한 "Accept"헤더 를 제공하기를 원합니다.

예를 들어 API가 XML 및 JSON으로 데이터를 반환 할 수 있고 JSON 결과를 원하는 경우 HttpWebRequest.Accept속성을 "application / json" 으로 설정해야합니다 .

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json";

1
이것으로 매개 변수를 전달할 수 있습니까 ??
Jidheesh 라잔

아마 당신은 당신의 매개 변수를 추가 할 수 있습니다 requestUri/ 즉 로컬 호스트 / API / 제품 (123)
DmitryBoyko


1
단지 request.ContentType = "응용 프로그램 / JSON을 추가, 한 부족 나를 위해 내가 당신의 솔루션은 올바른 생각 때문에.
Campinho

현재 수락 된 답변이 올바르지 않기 때문에이 답변을 수락해야합니다. 적절한 경우 사용하지 않는 또 다른 예는 ... "동의"
Arkaine55
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.