8.4Forcing IPv4 or IPv6 requests
Created on Aug 17, 2026~1 min read
By configuring the ConnectCallback of SocketsHttpHandler, you can force HttpClient to initiate requests using a specified IP version or local egress address, which is suitable for network policy control or multi-NIC environments to optimize performance or meet network requirements. The example is as follows:
// Force IPv4services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { ConnectCallback = HttpRemoteUtility.IPv4ConnectCallback });// Force IPv6services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { ConnectCallback = HttpRemoteUtility.IPv6ConnectCallback });// Default (auto-select)services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { ConnectCallback = HttpRemoteUtility.UnspecifiedConnectCallback });// Multi-NIC scenario: specify the local egress IPv4services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { ConnectCallback = (context, token) => HttpRemoteUtility.ConnectWithLocalIPv4(IPAddress.Parse("192.168.0.103"), context, token) });// Multi-NIC scenario: specify the local egress IPv6services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { ConnectCallback = (context, token) => HttpRemoteUtility.ConnectWithLocalIPv6(IPAddress.Parse("::1"), context, token) });