OSS.Http 바 텀 HttpClient 재 구성 패키지 지원 표준 라 이브 러 리 완료

OSS.Http프로젝트 가.Net Standard 표준 라 이브 러 리 에 대한 지원 이 이미 이전 되 었 고 OSS 오픈 소스 시리즈 의 두 최 하층 라 이브 러 리 는 이미 크로스 런 시 지원 하 는 능력 을 갖 추고 있다.OSS.Http라 이브 러 리 는 몇 년 전에 제 가RestSharp의 사 고 를 참조 하여 완 성 된 경 량 형 Http 요청 프레임 워 크 입 니 다.시간 이 오래 걸 리 기 때문에 밑바닥 에서 사용 하 는 것 은 HttpWebRequest 입 니 다.이번 에는 기본적으로 완전히 재 구성 되 었 습 니 다.이 글 은 주로 1.HttpClient 의 소개,2.재 구성 사고,3.쉽게 발생 할 수 있 는 문제 들 을 포함 합 니 다.
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)에 관심 을 가 져 주 십시오.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기