ASP.NET MVC 웹 API HttpClient 소개

3742 단어 HttpClient
1.HttpClient 간단 한 소 개 는 어렴풋 하 게 기억 합 니 다.그 때 는 WebClient,HttpWebRequest 로 요청 을 보 냈 습 니 다.현재 ASP.NET MVC 4 에는 HttpClient 와 같은 HttpResponseMessage 를 받 고 HttpRequestMesssage 를 보 내 는 데 사 용 됩 니 다.문 제 는 웹 클 라 이언 트,HttpWebRequest 가 해당 하 는 기능 을 수행 할 수 있 는데 왜 HttpClient 클래스 를 사용 해 야 하 는가 하 는 것 입 니 다..NET Framework 에서 이러한 클래스 가 제 기 된 이상 특별한 점 이 있 을 것 입 니 다.여기에 몇 가지 다른 점 을 나열 합 니 다.(1)HttpClient 의 실제 사례 에서 확장 을 설정 하고 기본 머리 를 설정 할 수 있 습 니 다.완료 되 지 않 은 요청 과 설정 취소(2)HttpClient 에 연결 풀 이 있 음(3)HttpClient 는 특정 서버 와 연결 되 지 않 습 니 다.모든 Http 요청 에 접근 할 수 있 습 니 다(4)HttpClient 는 비동기 요청 처리 2.HttpClient 비고 설명 HttpClient 는 System.net.Http.dll 프로그램 에 포함 되 어 있 습 니 다.사용자 가 http 요청 을 받 아들 이 고 보 낼 수 있 습 니 다.이 종 류 는.NET 4.0 이상 버 전에 적 용 됩 니 다.기본적으로 HttpWebRequest 는 서버 에 요청 을 보 내 는 데 사 용 됩 니 다.이 동작 은 HttpMessage Handler 인 스 턴 스 를 가 져 오 는 구조 함수 리 셋 중 하 나 를 매개 변수 로 변경 할 수 있 습 니 다.인증 기능 이나 캐 시 가 필요 하 다 면 WebRequestHandler 는 설정 에 사용 할 수 있 고 인 스 턴 스 는 구조 함수 에 전달 할 수 있 습 니 다.돌아 오 는 처리 프로그램 은 HttpMessage Handler 파 라 메 터 를 사용 한 구조 함수 재 업로드 중 하 나 를 전달 합 니 다.더 많은 설명 은 마이크로소프트 공식 사 이 트 를 참고 할 수 있 습 니 다.http://msdn.microsoft.com/zh-cn/library/system.net.http.httpclient.aspx3.HttpClient기본 동작
 
static void BasicMethod()
{
string url = "http://www.baidu.com";
HttpClient client = new HttpClient();
string content = client.GetStringAsync(url).Result;
Console.WriteLine(content);
}
이상 은 HttpClient 를 사용 하여 바 이 두 홈 페이지 를 요청 합 니 다.조작 하기에 도 편리 한 것 같 습 니 다.출력 요청 을 실행 한 결 과 는 다음 그림 과 같 습 니 다: 콘 솔 에서 출력 한 URL 요청 내용 입 니 다.HttpClient 는 위 에서 언급 한 GetStringasync()방법 외 에 도 다음 과 같은 Get 방법 을 제공 합 니 다.상세 한 것 은 MSDN:4 를 참고 하 십시오.사용자 정의 요청 헤드 를 사용자 정의 하려 면 HttpClient Handler Public class GitHttpClient Handler:HttpClient Handler 를 계승 해 야 합 니 다. 

{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Referrer = new Uri("http://www.google.com/");
request.Headers.Add("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727)");

Task<HttpResponseMessage> task = base.SendAsync(request, cancellationToken);
HttpResponseMessage response = task.Result;
MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
if (string.IsNullOrEmpty(contentType.CharSet))
{
contentType.CharSet = "GBK";
}
return task;
}
}
HttpClient Handler 는 흔히 볼 수 있 는 프 록 시 모드 입 니 다.HttpClient.GetStringasync()에 패 키 지 를 추가 하여 HttpClient 의 입 출력 을 차단 하여 사용자 정의 작업 을 실현 합 니 다.이런 방식 은 우리 가 MVC 에서 매우 흔히 볼 수 있 는 것 이 바로 MVC 의 필터 입 니 다.5.요청 내용 이 너무 길 면 HttpClient 에 속성 이 있 습 니 다.MaxResponse ContentBufferSize 는 해당 내용 을 읽 는 것 이 가장 큰 바이트 캐 시 수 이 고 기본 값 은 64K 입 니 다.페이지 내용 이 많 을 때 64K 를 초과 하면 이상 HttpRequestException 을 던 져 Get 에 실패 합 니 다.우 리 는 이 속성의 크기 를 인공 적 으로 설정 할 수 있다.
 
HttpClient client = new HttpClient() { MaxResponseContentBufferSize = 1024 * 1024 };
위 와 같은 방식 으로 처리 하면 된다.6.중국어 문제,중국어 문 제 는 항상 골 치 아 프 고 어 지 러 운 경우 가 많다.위 에서 언급 한 사용자 정의 요청 헤더 도 처리 할 수 있 습 니 다.여기에 코드 를 붙 여 참고 하 십시오.중국어 문 제 는 좀 복잡 합 니 다.구체 적 인 상황 에 따라 처리 해 야 합 니 다.
 
HttpResponseMessage response = task.Result;
MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
if(string.IsNullOrEmpty(contentType.CharSet))
{
contentType.CharSet = "GBK";
}

좋은 웹페이지 즐겨찾기