public void Request(string url, double x, double y, int tolerance, string[] layers, double extendXmin, double extendYmin, double extendXmax, double extendYmax, double mapWidth, double mapHeight, double mapDpi, bool returnGeometry, ICredentials credentials = null, int sr = int.MinValue)
{
//remove trailing slash from url
if (url.Length > 0 && url[url.Length - 1].Equals('/'))
url = url.Remove(url.Length - 1, 1);
var pointGeom = string.Format(CultureInfo.InvariantCulture, "{0},{1}", x, y);
var layersString = CreateLayersString(layers);
var mapExtend = string.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3}", extendXmin, extendYmin, extendXmax, extendYmax);
var imageDisplay = string.Format(CultureInfo.InvariantCulture, "{0},{1},{2}", mapWidth, mapHeight, mapDpi);
var requestUrl =
$"{url}/identify?f=pjson&geometryType=esriGeometryPoint&geometry={pointGeom}&tolerance={tolerance}{layersString}&mapExtent={mapExtend}&imageDisplay={imageDisplay}&returnGeometry={returnGeometry}{(sr != int.MinValue ? $"&sr={sr}" : "")}";
_webRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
if (credentials == null)
_webRequest.UseDefaultCredentials = true;
else
_webRequest.Credentials = credentials;
_webRequest.BeginGetResponse(FinishWebRequest, null);
}