Implement IpCityLocationService
To extend the default functionality of Sitefinity IpCityLocationService
, you can implement the IIpCityLocationService
interface in your class. You then replace the instance of IpCityLocationService that Sitefinity uses with your implementation via the ObjectFactory
container.
The IIpCityLocationService interface requires you to implement the GetLocation(IPAddress ipAddress)
method and the bool IsReady
property.
Extend the service
To extend the default functionality, you can call the Sitefinity base implementation and plug your logic afterwards. For example:
Next, you register the newly created service in Global.asax as follows:
Replace the default service
Sitefinity implementation of IpCityLocationService
relies on the MaxMind GeoLite2 database. To change this logic completely and use a different GeoLocation database, you can implement the IIpCityLocationService
interface with your own logic and register the service.
The following example demonstrates how to implement the IIpCityLocationService
with the previous version of the MaxMind GeoLite City database and API.
NOTE: The database and API versions of MaxMind GeoLite, mentioned above are used by Sitefinity CMS versions 11.0 and older. In case you notice discrepancies in the behavior between the old database and the new one used in Sitefinity 11.1 and newer, you can use this sample to achieve backward compatibility. In addition, you can use this sample to get you started on how IIpCityLocationService
interface can be implemented for any other geo IP database service and used in Sitefinity.
- Install the MaxMind GeoIP API, available as a NuGet package in the following location: https://www.nuget.org/packages/MaxMind.GeoIP/2.1.17
- Download the MaxMind GeoLite City database. MaxMind still has the old databases available for download at https://dev.maxmind.com/geoip/legacy/geolite/). You need to download the binary (e.g. http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz) and extract it in your Sitefinity website ~/App_Data/GeoLocation/ folder. The extracted file name must be GeoLiteCity.dat.
- Implement the
IIpCityLocationService
. When implementing IIpCityLocationService
interface in your custom service, you need to:
- Implement the
IsReady
property so it indicates to Sitefinity or your custom code whether the service is ready to be used. This sample demonstrates how IsReady
can be set to true/false by checking whether the MaxMind LookupService
object is properly instantiated.
- Implement the GetLocation method, so that your service can return CityLocation objects. This sample uses the MaxMind LookupService public
getLocation(IPAddress addr)
method and populates a Sitefinity CityLocation
object with the result.
The complete sample follows:
- Replace the default
IpCityLocationService
used by Sitefinity with your custom one. To do that you need to hook up to the Bootstrapper.Bootstrapped
event in your Sitefinity application’s Global.asax and register your service through the ObjectFactory
container: