WebRequest.RegisterPrefix 사용 에 대한 자세 한 설명

RegisterPrefix 방법 은 웹 Request 를 서비스 요청 에 대신 등록 합 니 다.WebRequest 후 대 는 보통 특정한 프로 토 콜(예 를 들 어 HTTP 나 FTP)을 처리 하기 위해 등록 되 지만 특정 서버 나 서버 의 경로 에 대한 요청 을 처리 하기 위해 등 록 될 수도 있 습 니 다.
등 록 된 사전 등록 보존 유형 은 다음 과 같은 유형 을 포함 합 니 다.
    http://
    https://
    ftp://
    file://
msdn 의 설명 은 WebRequest 자 대 를 서비스 요청 에 등록 하 는 것 은 매우 짧 고 추상 적 이 며 백화 가 부족 하 다 는 것 이다.만약 당신 이 처음부터 이 말의 뜻 을 이해 했다 면 나 는 당신 의 지능 이 매우 높 고 기술 도 좋다 고 말 할 수 밖 에 없다.
레 지 스 터 프 리 픽 스 가 무슨 뜻 인지 말 하지 않 고 제 가 겪 은 문 제 를 먼저 보 겠 습 니 다.
http 업로드 vs ftp 업로드 중 큰 파일 이 있 고 클 라 이언 트 가 wpf 이기 때문에 ftp 업 로드 를 선 택 했 습 니 다.결 과 는 파일 업로드 경로 입 니 다.
ftp://192.168.0.1/ 6be490e3-d383-4167-8cbd-b833f31d855cDesert.jpg
ftp 의 사용자 이름 은 WQ 이 고 비밀 번 호 는 123456 입 니 다.
ftp 의 경 로 는 그림 이기 때문에 그림 에 연결 하려 고 합 니 다.예 를 들 어

이게 뭐 가 문제 야?
이렇게 직접 연결 하면 이상 을 던 집 니 다.ftp 는 사용자 이름 이 필요 하기 때문에 비밀번호 가 로그 인 한 후에 야 자원 에 접근 할 수 있 습 니 다.
C\#코드 에서 WebClient 를 사용 하여 FtpUrl 의 Stream 을 가 져 온 다음 에 처리 할 수 있 습 니 다.
그래서 코드 에 엄 청 많아 요.
webClient.Credentials = new NetworkCredential("WQ", "123456");
물론 Factory 모드 로 도 처리 할 수 있 지만 전체적인 느낌 은 귀 찮 습 니 다.
사실 마이크로 소프트 는 일찍부터 이런 문 제 를 발 견 했 기 때문에 웹 클 라 이언 트 는 웹 클 라 이언 트.Create 의 방법 을 제 공 했 습 니 다.Create 를 보면 무엇 을 생각 하 게 되 었 습 니까?맞 아,바로 공장 이 야.
하면,만약,만약...ftp://192.168.0.1 웹 클 라 이언 트 가 자동 으로 Credentials 를 추가 하면 이 문 제 를 해결 할 수 있 습 니 다.이 기능 을 어떻게 실현 하 는 지 는 Register Prefix 방법 을 사용 해 야 합 니 다.
image
 첫 번 째 prefix 는 접두사ftp://192.168.0.1 다음 에 이 prefix 에 대한 모든 요청 은 creator 의 Create 방법 을 자동 으로 호출 하여 WebRequest 대상 을 만 듭 니 다.웹 Request 대상 을 만 든 이 유 는 웹 클 라 이언 트 도 웹 Request 에서 계승 하기 때 문 입 니 다.그래서 new WebClient 를 사용 할 때 내부 에서 WebRequest.Create 방법 으로 되 돌아 오 는 WebRequest 를 호출 합 니 다.따라서 IWebRequestCreate 를 계승 하기 위해 서 는 Credentials WebRequestCreater 클래스 를 새로 만들어 야 합 니 다. 코드 는 다음 과 같 습 니 다.

public class CredentialsWebRequestCreater:IWebRequestCreate
{
    private string userName = string.Empty;
    private string password = string.Empty;
    public CredentialsWebRequestCreater(string userName, string password)
    {
        this.userName = userName;
        this.password = password;
    }
    public WebRequest Create(Uri uri)
    {
        WebRequest webRequest = WebRequest.CreateDefault(uri);
        webRequest.Credentials = new NetworkCredential(this.userName, this.password);
        return webRequest;
    }
}
클래스 는 IWebRequestCreate 인 터 페 이 스 를 실 현 했 기 때문에 RegisterPrefix 방법 으로 호출 할 수 있 습 니 다.어떻게 RegisterPrefix 방법 을 사용 합 니까?System.Net.WebRequest.RegisterPrefix(“ftp://192.168.0.1”,                    new Utils.CredentialsWebRequestCreater(“WQ”,”123456”));이렇게 등록 하면 앞으로 모든 게 맞아요.ftp://192.168.0.1 의 요청 은 모두 Credentials WebRequestCreater 를 사용 하여 WebRequest 대상 을 만 들 고,Credentials WebRequestCreater 류 의 Create 방법 은 사용자 이름과 비밀 번 호 를 추가 합 니 다.이렇게 하면 바로 연결 할 수 있 습 니 다.예 를 들 어

좋은 웹페이지 즐겨찾기