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:

cs
// 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)    });