Orsak


Manual

While also achievable with effects directly, using DelegatingHandlers is easy and allows making use of the wider ecosystem.

open System
open System.Net.Http
//make sure your .NET version has sensible defaults for these:

let inner =
    new SocketsHttpHandler(
        PooledConnectionIdleTimeout = TimeSpan.FromMinutes(1),
        PooledConnectionLifetime = TimeSpan.FromMinutes(1)
    )

let clientFactory f handlers =
    let client = new HttpClient(handlers inner, false)
    f client

IHttpClientFactory

namespace System
namespace System.Net
namespace System.Net.Http
val inner: SocketsHttpHandler
Multiple items
type SocketsHttpHandler = inherit HttpMessageHandler new: unit -> unit member ActivityHeadersPropagator: DistributedContextPropagator member AllowAutoRedirect: bool member AutomaticDecompression: DecompressionMethods member ConnectCallback: Func<SocketsHttpConnectionContext,CancellationToken,ValueTask<Stream>> member ConnectTimeout: TimeSpan member CookieContainer: CookieContainer member Credentials: ICredentials member DefaultProxyCredentials: ICredentials ...
<summary>Provides the default message handler used by <see cref="T:System.Net.Http.HttpClient" /> in .NET Core 2.1 and later.</summary>

--------------------
SocketsHttpHandler() : SocketsHttpHandler
Multiple items
[<Struct>] type TimeSpan = new: hours: int * minutes: int * seconds: int -> unit + 4 overloads member Add: ts: TimeSpan -> TimeSpan member CompareTo: value: obj -> int + 1 overload member Divide: divisor: float -> TimeSpan + 1 overload member Duration: unit -> TimeSpan member Equals: value: obj -> bool + 2 overloads member GetHashCode: unit -> int member Multiply: factor: float -> TimeSpan member Negate: unit -> TimeSpan member Subtract: ts: TimeSpan -> TimeSpan ...
<summary>Represents a time interval.</summary>

--------------------
TimeSpan ()
TimeSpan(ticks: int64) : TimeSpan
TimeSpan(hours: int, minutes: int, seconds: int) : TimeSpan
TimeSpan(days: int, hours: int, minutes: int, seconds: int) : TimeSpan
TimeSpan(days: int, hours: int, minutes: int, seconds: int, milliseconds: int) : TimeSpan
TimeSpan(days: int, hours: int, minutes: int, seconds: int, milliseconds: int, microseconds: int) : TimeSpan
TimeSpan.FromMinutes(value: float) : TimeSpan
val clientFactory: f: (HttpClient -> 'a) -> handlers: (SocketsHttpHandler -> #HttpMessageHandler) -> 'a
val f: (HttpClient -> 'a)
val handlers: (SocketsHttpHandler -> #HttpMessageHandler)
val client: HttpClient
Multiple items
type HttpClient = inherit HttpMessageInvoker new: unit -> unit + 2 overloads member CancelPendingRequests: unit -> unit member DeleteAsync: requestUri: string -> Task<HttpResponseMessage> + 3 overloads member GetAsync: requestUri: string -> Task<HttpResponseMessage> + 7 overloads member GetByteArrayAsync: requestUri: string -> Task<byte array> + 3 overloads member GetStreamAsync: requestUri: string -> Task<Stream> + 3 overloads member GetStringAsync: requestUri: string -> Task<string> + 3 overloads member PatchAsync: requestUri: string * content: HttpContent -> Task<HttpResponseMessage> + 3 overloads member PostAsync: requestUri: string * content: HttpContent -> Task<HttpResponseMessage> + 3 overloads ...
<summary>Provides a class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI.</summary>

--------------------
HttpClient() : HttpClient
HttpClient(handler: HttpMessageHandler) : HttpClient
HttpClient(handler: HttpMessageHandler, disposeHandler: bool) : HttpClient