The code below works for me.
using System;
using System.Text;
using System.Net;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
string baseUrl = @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer";
string jsonGeom = GetStateGeom(baseUrl,1, "Colorado");
string featuresJson = QueryHighways(baseUrl, 0, jsonGeom);
Console.WriteLine(featuresJson);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static string GetStateGeom(string baseUrl, int layerID,string state)
{
string url = String.Format("{0}/{1}/query?text={2}&f=pjson",baseUrl,layerID,state);
var wc = new WebClient();
var strm = wc.OpenRead(new Uri(url));
var strmReader = new StreamReader(strm);
var json = strmReader.ReadToEnd();
//Console.WriteLine(json);
strm.Close();
var jObj = JsonConvert.DeserializeObject(json) as JObject;
JArray features = (JArray)jObj["features"];
if (features.Count == 0)
{
Console.WriteLine("state of {0} not found", state);
return null;
}
string jsonGeom = ((JObject)features[0])["geometry"].ToString();
return jsonGeom;
}
private static string QueryHighways(string baseUrl, int layerID,string jsonGeom)
{
string url = String.Format("{0}/{1}/query", baseUrl, layerID);
var wc = new WebClient();
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
StringBuilder sb = new StringBuilder();
sb.Append("geometryType=esriGeometryPolygon");
sb.Append(String.Format("&geometry={0}",jsonGeom));
sb.Append("&inSR=&spatialRel=esriSpatialRelIntersects");
sb.Append("&returnGeometry=true");
sb.Append("&relationParam=");
sb.Append("&where=");
sb.Append("&returnCountOnly=false");
sb.Append("&maxAllowableOffset=");
sb.Append("&f=pjson");
var bytes = Encoding.ASCII.GetBytes(sb.ToString());
var respBytes = wc.UploadData(url, "POST", bytes);
return Encoding.ASCII.GetString(respBytes);
}
}
}