C# ESRI地理编码器的格式化请求

C# ESRI地理编码器的格式化请求,c#,json,rest,restsharp,esri,C#,Json,Rest,Restsharp,Esri,我有一些代码使用RestSharp格式化JSON请求以访问ESRI地理编码API。代码是有效的,但我想知道是否有更好的方法将请求转换为正确的格式这里是我所拥有的示例,下面是请求的外观示例 request = new RestRequest("geocodeAddresses", Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); //Forma

我有一些代码使用RestSharp格式化JSON请求以访问ESRI地理编码API。代码是有效的,但我想知道是否有更好的方法将请求转换为正确的格式这里是我所拥有的示例,下面是请求的外观示例

request = new RestRequest("geocodeAddresses", Method.POST);
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");

        //Format the request properly
        var attributes = new Dictionary<string, object>();
        attributes.Add("OBJECTID", address.Address);
        attributes.Add("Address", address.Address);
        attributes.Add("City", address.City);
        attributes.Add("Region", address.State);
        attributes.Add("Postal", address.ZipCode);

        JsonObject attributesObj = new JsonObject();
        foreach (var parms in attributes)
        {
            attributesObj.Add(parms);
        }


        JsonObject recordsObj = new JsonObject();
        recordsObj.Add("attributes", attributesObj);
        JsonArray EsriRequest = new JsonArray();
        EsriRequest.Add(recordsObj);
        JsonObject addressObj = new JsonObject();
        addressObj.Add("records", EsriRequest);




        request.AddParameter("addresses",
            addressObj.ToString());
        request.AddParameter("token", esriToken.ToString());
        request.AddParameter("f", "json");
        request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
        IRestResponse<EsriAddress> responseData = client.Execute<EsriAddress>(request);
request=newrestrequest(“geocodeAddresses”,Method.POST);
request.AddHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
//正确设置请求的格式
var attributes=newdictionary();
添加(“OBJECTID”,address.address);
属性。添加(“地址”,地址。地址);
属性。添加(“城市”,地址。城市);
添加(“区域”、地址、状态);
添加(“邮政”,地址.ZipCode);
JsonObject AttributeObject=新的JsonObject();
foreach(属性中的var参数)
{
属性bj.Add(parms);
}
JsonObject recordsObj=新的JsonObject();
记录sobj.Add(“属性”,attributesObj);
JsonArray EsriRequest=新JsonArray();
esirequest.Add(recordsObj);
JsonObject addressObj=新的JsonObject();
addressObj.Add(“记录”,EsriRequest);
request.AddParameter(“地址”,
addressObj.ToString());
request.AddParameter(“token”,esriToken.ToString());
AddParameter(“f”,“json”);
request.OnBeforeDeserialization=resp=>{resp.ContentType=“application/json”;};
IRestResponse responseData=client.Execute(请求);
请求输出示例:

http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/geocodeAddresses?addresses={"records":[{"attributes":{"OBJECTID":1,"Address":"380 New York St.","City":"Redlands","Region":"CA","Postal":"92373"}},{"attributes":{"OBJECTID":2,"Address":"1 World Way","City":"Los Angeles","Region":"CA","Postal":"90045"}}]}&sourceCountry=USA&token=<YOUR TOKEN>&f=pjson
http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/geocodeAddresses?addresses={“记录”:[{“属性”:{“OBJECTID”:1,“地址”:“纽约街380号”,“城市”:“雷德兰兹”,“地区”:“CA”,“邮政”:“92373”},{“属性”:{“OBJECTID”:2,“地址”:“1世界之路”,“城市”:“洛杉矶”,“地区”:“CA”,“邮政”:“90045”}}&sourceCountry=USA&token=&f=pjson

我目前只发送一个地址,但理论上api一次可以接收多个地址。

以下是我如何将一批地址发送到中的geocodeAddresses方法。我没有使用RestSharp,只是:

string-token=GetToken();
字符串url=”http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/geocodeAddresses"; 
使用(var client=new HttpClient())
{
使用(var content=new MultipartFormDataContent())
{
var值=新[]
{
新的KeyValuePair(“令牌”,令牌),
新的KeyValuePair(“用于存储”、“为真”),
新的KeyValuePair(“MaxBatchSize”,“1000”),
新的KeyValuePair(“外场”、“*”),
新的KeyValuePair(“f”、“json”),
new KeyValuePair(“addresses”,inputJson)//包含复杂类型数组的json字符串
};
foreach(值中的var keyValuePair)
添加(新的StringContent(keyValuePair.Value)、keyValuePair.Key);
var response=wait client.PostAsync(url、内容);
Task responseString=response.Content.ReadAsStringAsync();
string outputJson=等待响应字符串;
}
}

这是唯一的方法吗?我回顾了这个项目,我认为这是正确的答案,但是你知道使用这个批处理方法是否需要成本积分吗?对于任何其他需要这个的人,这个方法都有效。还不确定它是否需要积分。@TravisJ-如果您将“forStorage”参数设置为true,这将消耗积分。如果只对地图上的点进行地理编码,而不存储输出数据,则可以将此参数设置为false,并且不收取任何积分。这里有一些。仅供参考-地理编码消耗资源,谢谢。这将有助于为我的客户节省一些钱。您必须仔细检查Esri使用条款,但您可以将您的地理编码结果存储一段较长的时间,然后根据所有最近的地理缓存地址检查输入地址。您可以使用缓存结果(如果可用),进一步节省信用使用。