OSS.Http 바 텀 HttpClient 재 구성 패키지 지원 표준 라 이브 러 리 완료
5856 단어 HttpClient포장 하 다
1.httpclient 의 기본 소개
HttpClient 는.net framework 4.5 버 전에 서 인 용 된 새로운 기능 이 어야 합 니 다.그 전에 HttpWebRequest 를 자주 사 용 했 습 니 다.비교 해 보면 전 자 는 더욱 간단 하고 뚜렷 합 니 다.가장 중요 한 것 은.net standard API 를 완전히 지원 하 는 것 입 니 다.이것 도 제 가 선택 한 중요 한 이유 입 니 다.
HttpClient 는 구조 적 으로 큰 조정 을 했 고 완전히 비동기 적 인 실현 이 었 습 니 다.밑바닥 에서 비동기 적 인 지원 을 완성 했다 고 할 수 있 습 니 다.여기 서 먼저 대응 하 는 몇 가지 주요 유형 을 소개 합 니 다.
1. HtttpRequestMessage
요청 의 기본 정보,요청 주소,요청 동작 등 입 니 다.이 값 은 HttpClient 가 요청 하 는 방법 에서 인자 가 들 어 오 면 HttpResponseMessage 에 응답 합 니 다.
2. HttpContent
요청 한 내용 체 는 주로 요청 의 구체 적 인 내용,contenttype,contentlength 등 을 포함 하 는데 HtttpRequestMessage 의 속성 입 니 다.이 두 가 지 는 모두 Headers 속성 을 포함 하지만 범위 가 각각 다 릅 니 다.이것 은 헷 갈 리 기 쉬 운 부분 입 니 다.저 는 간단 한 분 류 를 해 주 었 습 니 다.
HttpRequestMessage 의 머리(HttpRequestHeaders)는 Accept,UserAgent,AcceptEncoding 등 http 링크 의 기본 속성 을 요청 합 니 다.
HttpContent 의 머리(HttpContentHeaders)는 현재 요청 내용 의 속성 입 니 다.주로 Allow,Content-Encoding,Content-Length,Content-Type,Expires,Last-Modified 등 이 있 습 니 다.자세 한 내용 은 공식 라 이브 러 리 를 참조 하 십시오.
HttpContent 시스템 은 다음 과 같은 몇 가지 기본 적 인 실현 을 제공 합 니 다.
3. HttpMessageHandler
이러한 주요 역할 은 요청 내용 처리 동작 등의 정의 입 니 다.예 를 들 어 리 셋 을 지원 하 는 지,쿠키,프 록 시 등 을 사용 할 수 있 는 지,시스템 설정 에 편향 되 어 있 는 지,이 값 은 HttpClient 구조 함 수 를 통 해 들 어 갈 수 있 습 니 다.시스템 이 기본적으로 제공 하 는 하위 클래스 는 HttpClient Handler 입 니 다.
4. HttpClient
구체 적 인 요청 은 호출 이 이 루어 지고 POST,GET,Delete 등 Http 요청 방법 이 완전 하 게 이 루어 졌 으 며 모든 방법 은 SendAsync 방법 으로 최종 호출 되 었 다.
위의 네 가지 주요 유형 은 HttpClient 요청 의 주요 실현 을 구성 합 니 다.간단 한 사용 이 라면 HttpClient 에 만 관심 을 가 져 야 합 니 다.다음 과 같 습 니 다.
사실 그 내부 에 서 는 HttpRequestMessage 와 HttpClient Handler 의 할당 이 기본적으로 실현 되 었 습 니 다.
간단하게 소 개 했 지만 기본적으로 HttpClient 의 실현 은 매우 명확 한 분업 을 했 고 예전 처럼 모든 설정 이 webrequest 에 집 중 된 것 이 아니 라 는 것 을 알 수 있다.분업 의 명확 하고 직접적인 장점 은 HttpClient 가 다 중 요청 공용 을 실현 한 것 이다.박문 을 참조 하 다
The default HttpClient is the simplest way in which you can start sending requests. A single HttpClient can be used to send as many HTTP requests as you want concurrently so in many scenarios you can just create one HttpClient and then use that for all your requests.
즉,시스템 에서 서로 다른 요청 을 할 때 HttpClient 를 공유 할 수 있 습 니 다.HttpWebReqest 처럼 기본적으로 요청 할 때마다 대상 을 다시 정의 하여 자원 소 모 를 줄 여야 합 니 다.
2.OSS.Http 재 구성
본론 으로 돌아 가 현재 코드 모듈 을 재 구성 합 니 다.제 가 말 한 바 와 같이.Net Standard 에서 http WebRequest 의 지원 을 전혀 제공 하지 않 기 때문에 저 는 다시 실현 하 는 결정 을 내 렸 습 니 다.예전 에 http WebRequest 의 누추 함 때문에 저 는 대체적으로 큰 패 키 징 구 조 를 만 들 었 습 니 다.상층 부 는 구체 적 인 하층부 실현 에 접촉 할 필요 가 없습니다.기본적으로 RestSharp 의 핵심 을 실 현 했 고 관심 이 있 는 학생 들 은 코드 OSS.Http 아래 Old 지점 을 참고 할 수 있 습 니 다.
재 구성 하기 전에 HttpClient 에 대해 잘 모 르 기 때문에 기 존의 프레임 워 크 절 차 를 계속 하고 전환 을 실현 하려 고 했 습 니 다.그러나 클 라 이언 트 문서 에 대한 조회 연구 에 따라 많은 패 키 징 이 전혀 필요 하지 않 고 절차 도 변화 한 것 을 발견 하여 원래 의 프레임 워 크 에 있 는 것 을 많이 삭제 하고 최종 적 인 실현 을 재 정리 했다.
물론 현재 의 HttpClient 자체 의 실현 은 충분히 간단 하고 뚜렷 하지만 많은 상황 에서 POST,GET 등 방법 을 직접 호출 하면 일부 코드 의 재 활용 을 줄 일 수 있 습 니 다.예 를 들 어OSS.Social프로젝트 에서 바 텀 에 저 는 Restconon 방법 만 실현 하면 전체적인 요청 통 제 를 달성 할 수 있 습 니 다.호출 자 는 Url,Http Mothed,Parameter 만 제공 하면 됩 니 다.
여기 서 나 는 간단 한 흐름 도 를 그 려 서 보 여 주 었 다.
절 차 는 기본적으로 큰 차이 가 없다.코드 는Github이 고 파일 의 구 조 는 다음 과 같다.
Mos 파일 아래:Enum.cs 매 거 진 클래스,FileParameter.cs 파일 매개 변수 클래스,FormParameter Form 폼 매개 변수 클래스,OsHttpRequest 요청 매개 변수 클래스,
OsRest.cs 현재 패 키 징 클래스 의 주요 구현 입 니 다.또한 HttpClient 자체 의 기능 이 통용 되 는 것 을 확보 하기 위해 OsRest 는 HttpClient 에서 계승 하 는 동시에 RestSend 방법 을 제공 합 니 다.이 방법 에서 절차 의 실현 을 완성 하고 최종 적 으로 SendAsync 방법 으로 요청 을 수행 합 니 다.
RestUtil.cs 보조 클래스 는 전역 OsRest(HttpClient)의 공용 을 완 료 했 고 기본 HttpClient Handler 를 정의 하여 이 클래스 를 정상적으로 직접 호출 하면 됩 니 다.
프로 세 스 의 사용자 정의 설정 을 실행 합 니 다.OSHttpRequest 의 RequestSet 의뢰 속성 에서 설정 할 수 있 습 니 다.예 를 들 어 접근 형식 을 json 으로 설정 할 수 있 습 니 다.
셋. 수월 한 문제
전체 재 구성 후 코드 가 많 지 않 지만 공유 할 수 있 는 문제 가 있 을 것 같 습 니 다.
1. Header 할당 문 제 는 제 첫 번 째 부분 을 참조 하 십시오.반드시 다른 Headers 를 구분 해 야 합 니 다.그렇지 않 으 면 정확 하지 않 은 값 오 류 를 보고 할 수 있 습 니 다.
2. 위의 플 로 차 트 에서"Get 인지 아 닌 지"의 판단 이 있 음 을 알 수 있 습 니 다.Get 요청 이 라면 Content 는 값 을 부여 할 수 없 기 때 문 입 니 다.HttpWebReqest 에서 get 요청 이 GetRequestStream 방법 을 호출 하면"이 술어 형식의 내용 본문 을 보 낼 수 없습니다"라 는 이상 한 오류 가 발생 할 수 있 습 니 다.물론 OSS.Http 를 요청 으로 사용한다 면 이 문 제 는 없습니다.
3. 파일 을 업로드 하 는 동시에 업로드 하 는 폼 매개 변 수 는 단독 폼 매개 변수 와 제출 하 는 것 이 다 릅 니 다.처리 에 주의 하 십시오.OsRest 류 를 참조 할 줄 모 르 면 됩 니 다.이미 처 리 했 습 니 다.
만약 다른 문제 가 있 거나 후속 업데이트 에 관심 이 있다 면 대중 번호(OSSCoder)에 관심 을 가 져 주 십시오.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【httpclient】에서의 요구로부터 controller까지의 흐름에 대해서 확인과 리팩토링이전에는 JQuery의 autocomplete, ajax 및 httpclient를 사용하여 자동 완성을 구현했지만 내용에 대해 희미하게만 파악할 수 없었습니다. 리팩토링을 실시하면서 내용을 확인한다. 우선, 외부 A...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.