using System.Net;
using (WebClient client = new WebClient())
{
try
{
string data = client.DownloadString(new Uri("http://ip-api.com/json/"));
// process Geo data
}
catch(Exception exception)
{
// Handle Exceptions
}
}
There's no way to even guess about this today.
There are just to many NAT'ted IP systems, where many clients connect through some IP in some geo they choose or is chosen for them.
VPNs. Cell services. Etc...
Follow how Google handles this. They let you set your Geo, based on you're physical Geo, rather than connecting IP Geo.
Since you mention zipcode, likely you're targeting US visitors so VPNs + Cell services will be used most by US visitors, so guessing will be highly inaccurate for US visitors.