2017-10-07 14 views
1

에 나는 FlurlHttp를 사용하고 난 어떤 API 호출에 AllowAutoRedirect를 사용하지 않도록합니다. 나는안 AutoRedirect FlurlClient

WebRequestHandler webRequestHandler = new WebRequestHandler(); 
webRequestHandler.AllowAutoRedirect = false; 
HttpClient httpClient = new HttpClient(webRequestHandler); 
// Send a request using GetAsync or PostAsync 
Task<HttpResponseMessage> response = httpClient.GetAsync("http://www.google.com") 

How can I get System.Net.Http.HttpClient to not follow 302 redirects?을 알고 있지만 Flurl 위해 나는 C# Flurl - Add WebRequestHandler to FlurlClient에 설명 된 유사 유일한 방법 발견

public class HttpClientFactoryWithWebRequestHandler : DefaultHttpClientFactory 
{ 
    private readonly WebRequestHandler _webRequestHandler; 

    public HttpClientFactoryWithWebRequestHandler (WebRequestHandler webRequestHandler) 
    { 
     _webRequestHandler = webRequestHandler ; 
    } 

    public override HttpMessageHandler CreateMessageHandler() 
    { 
     var handler =_webRequestHandler ; 
//Or var handler = new WebRequestHandler(_webRequestHandler); 
     return handler; 
    } 
} 

(나는 아직 코드 아래에 컴파일하지 않은 그것을는 약간의 오차가있을 수 있으므로) 그런 다음 새로운 FlurlClient에 대한 설정을 전달할 수 있습니다.

WebRequestHandler webRequestHandler = new WebRequestHandler(); 
webRequestHandler.AllowAutoRedirect = false; 
var fc = new FlurlClient(url) 
    .ConfigureClient(c => c.HttpClientFactory = 
        new HttpClientFactoryWithWebRequestHandler (webRequestHandler)); 

더 복잡 할 수 있습니다. 그것은 올바른 방법입니까 아니면 더 간단하게 할 수 있습니까?

+0

는 응용 프로그램 전반의 모든 클라이언트에 리디렉션을 사용하지 않도록 확인인가? 'client.AllowAutoRedirect = 거짓 '과; –

+0

@ToddMenier는 현재 작업은 클라이언트가 ='거짓 FlurlClient.HttpClient.AllowAutoRedirect 별도의 작은 MVC 사이트로 제안에 대한 –

답변

0

이 Flurl 직접 지원하지 않는 시나리오이기 때문에 그것은 조금 무거운 느낌, 그래서 후드 약간의 땜질이 필요합니다. 당신은 올바른 길을 가고 있습니다. 그러나 당신이 그것을 단순화 할 수있는 몇 가지 방법이 있다고 생각합니다. 먼저 공장 내에 WebRequestHandler을 만들 것을 제안합니다. 외부에서 생성하고 전달하는 것은 불필요한 것처럼 보입니다.

public class NoRedirectHttpClientFactory : DefaultHttpClientFactory 
{ 
    public override HttpMessageHandler CreateMessageHandler() 
    { 
     return new WebRequestHandler { AllowAutoRedirect = false }; 
    } 
} 

기본적으로이 동작을 앱 전체에서 사용하려는 경우 시작할 때 전역으로 등록 할 수 있습니다. 그런 다음 개별 FlurlClient을 사용하여 아무 것도 할 필요가 없습니다. 당신이 선택하고 당신이 그것을 해제하는 FlurlClient의 선택할 수있는 능력을 필요로하는 경우

FlurlHttp.Configure(settings => 
    settings.HttpClientFactory = new NoRedirectHttpClientFactory()); 

그렇지 않으면, 확장 방법은 좀 더 쉽게 만들 것입니다 :

public static IFlurlClient WithoutRedirects(this IFlurlClient fc) { 
    fc.Settings.HttpClientFactory = new NoRedirectHttpClientFactory(); 
    return fc; 
} 

을 다음과 같이 사용 :

new FlurlClient(url).WithoutRedirects()... 
+0

감사를 실행하는 microservice이기 때문이 아니라, 괜찮아요'하지 않습니다 작업. AllowAutoRedirect는 HttpClient가 아니라 [HttpClientHandler] (https://msdn.microsoft.com/en-us/library/system.net.http.httpclienthandler (v = vs.110) .aspx)의 속성입니다. 'FlurlClient.HttpClientHandler' 속성을 갖고 싶습니다. –

+0

정확합니다. 답변이 업데이트되었습니다. –