Blazor 0.6.0 "닦아 내기"Flurl 호환성?

blazor flurl httpclientfactory

문제

Blazor를 0.5.1 (Flurl 작동 중)에서 0.6.0으로 업데이트 한 후 flurl을 통해 호출하면 예외가 발생합니다.

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method 
because it was wiped. See stack trace for details.

이 프로젝트는 Flurl에서 사용하기 위해 Blazor의 HttpClient를 가져 오는 HttpClientFactory를 만듭니다.

HttpClientFactoryForBlazor를 사용하여 Blazor의 HttpClient (http)로 FlurlClient 만들기 :

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method 
because it was wiped. See stack trace for details.

Flurl의 확장 메서드 "IFlurlRequest.WithClient (c);"를 통해 예를 들어 FlurlClient (c)를 사용합니다.

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method 
because it was wiped. See stack trace for details.

따라서이 접근 방식이 더 이상 작동하지 않는 것처럼 보입니다.

Blazor 0.6.0으로 Flurl을 만드는 법을 아는 사람이 있습니까?

콜 스택 :

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method 
because it was wiped. See stack trace for details.

수락 된 답변

배경 만 알면, Blazor 팀은 앱의 사용 공간을 현저하게 줄이고 일부 비정상적인 조치 를 취하고 있습니다. 간단히 말해 HttpClientHandler 를 "닦아서"약 20 % 정도 줄였습니다.

wipe 는 "지정된 메소드 본문을 단일 실행 명령어로 대체"를 의미합니다. 이렇게하면 (실제로 메서드를 완전히 제거하는 대신에) 어셈블리가 완전히 표준 API 표면을 유지한다는 것을 의미하며, 지워진 메서드 중 하나를 사용하려고하면 쉽게 지워지는 예외 스택 추적을 얻을 수 있습니다 메소드를 호출하려고합니다.

Blazor는 여전히 컴파일 목적으로 HttpClientHandler 를 인식하지만 사용자 (또는이 경우 호환되는 라이브러리)가 사용하려고하면 런타임 예외가 발생합니다.

그러나 HttpClient 일부 구현 포장해야한다 HttpMessageHandler : Blazor 자체가 BrowserHttpMessageHandler . Flurl은 HttpClientFactory 를 통해이를 쉽게 바꿀 수있는 방법을 제공합니다. 그러나 HttpClient 인스턴스를 전달하거나 CreateHttpClient 구현할 필요는 없습니다. 대신 DefaultHttpClientFactory 에서 상속하고 CreateMessageHandler 재정의하십시오.

private class HttpClientFactoryForBlazor : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new BrowserHttpMessageHandler();
    }
}

또한 FlurlClient 를 만들 때마다 앱 시작시 전 세계적으로 한 번 등록하는 것이 좋습니다.

private class HttpClientFactoryForBlazor : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new BrowserHttpMessageHandler();
    }
}

또한 Blazor는 아직 실험 주목해야한다 그 BrowserHttpMessageHandler 향후 릴리스에서 더 이상 사용되지 수있다 , 그래서 이것은 단지 일시적인 해결 방법이 될 수 있다고 기대한다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.