2016-12-08 6 views
2

Flurl과 협력하여 인증서 기반 인증이 필요한 API를 사용하고 있습니다. this SO post에서 WebRequestHandler에 인증서를 추가하고 HttpClient에게이 핸들러를 사용하도록 지시하는 것이 쉽습니다.C# Flurl - FlurlClient에 WebRequestHandler 추가

그러나 Flurl을 사용하는 것은 분명하지 않습니다. 나는 다음 세 가지를 시도했다. 내가 처음 내가 핸들러를 생성하고이 HttpClient에 할당 할 X509HttpFactory : DefaultHttpFactory 내 자신을 만들 필요가 있다고 의심 DefaultHttpFactory

확장

. 그러나 소스를 보면 CreateClient의 생성자가 이미 처리기를 예상한다는 것을 알았습니다. 이 핸들러는 어디서 오는 걸까요? 이 HttpClient로 컴파일되지 않습니다 DefaultHttpFactory

WebRequestHandler handler = new WebRequestHandler(); 
handler.ClientCertificates.Add(myX509Cert); 
var clientFactory = new DefaultHttpClientFactory(); 
FlurlClient fc = clientFactory.CreateClient(url, handler); 

를 사용하여 클라이언트를 만들기

이 가장 실행 가능한 옵션처럼 보인다 FlurlClient

사용 ConfigureHttpClient

var clientFactory = new DefaultHttpClientFactory(); 
FlurlClient fc = new Url("foobar.com").ConfigureHttpClient(client => client = clientFactory 
    .CreateClient(url, handler)); 

을 주조 할 수 없다 , 부 대리인이 반환 유형이없는 Action이므로 확신 할 수 없습니다.

[질문

Flurl를 사용하여 클라이언트 측 인증서 인증을 지원하는 가장 좋은/올바른 방법은 무엇입니까?

답변

1

닫기 - 사용자 지정 공장이 반드시 있어야합니다. 당신은 (응용 프로그램 시작시) 세계를 등록 할 수 있습니다 그리고

public class X509HttpFactory : DefaultHttpClientFactory 
{ 
    private readonly X509Certificate2 _cert; 

    public X509HttpFactory(X509Certificate2 cert) { 
     _cert = cert; 
    } 

    public override HttpMessageHandler CreateMessageHandler() { 
     var handler = new WebRequestHandler(); 
     handler.ClientCertificates.Add(_cert); 
     return handler; 
    } 
} 

:하지만 당신은 CreateMessageHandler 오히려 CreateClient보다 우선 할

FlurlHttp.ConfigureClient(ROOT_URL, cli => { 
    cli.Settings.HttpClientFactory = new X509HttpFactory(myCert); 
}); 
:
FlurlHttp.Configure(settings => { 
    settings.HttpClientFactory = new X509HttpFactory(myCert); 
}); 

또는 특정 호스트에 대한 모든 통화

또는 신품으로 FlurlClient :

var cli = new FlurlClient(url) 
    .Configure(settings => settings.HttpClientFactory = new X509HttpFactory(myCert)); 

또는 기존 :

cli.Settings.HttpClientFactory = new X509HttpFactory(myCert); 
+1

감사합니다. 굉장한 도서관! –