Http Post C# с ответом Json
Я хотел бы получить метод, который генерирует сообщение http со следующей конфигурацией в C#.
POST pqs.php HTTP/1.1
Host: nationalmap.gov/epqs/pqs.php
Content-Type: application/x-www-form-urlencoded
Content-Length: length
x=string&y=string&units=string&output=string
Я пробовал следующее, однако я получаю недопустимые координаты, хотя они существуют на карте (пример проб: lat = 36.574832 и lon = -85.411825
Вот код, который я использую:
public class ElevationUSGISPull
{
public string responseString = null;
private string BASEURL = "http://nationalmap.gov/epqs/pqs.php";
public bool httpPostElevationRequest( string lon,string lat)
{
try
{
using (WebClient client = new WebClient())
{
byte[] response =
client.UploadValues(BASEURL, new NameValueCollection()
{
{ "x", lon },
{ "y", lat },
{"units", "feet" },
{"output","json" },
});
string result = System.Text.Encoding.UTF8.GetString(response);
responseString = result;
}
return true;
}
catch(Exception eX)
{
return false;
}
}
}
Я получаю следующую ошибку:
<error>General failure: Invalid Coordinates</error>
Более того, кто-нибудь пробовал сайт.gov для получения данных о высоте. Я использовал сервер Google, однако он имеет много ограничений, связанных с количеством запросов, и я пытаюсь сделать много запросов для данной области.
Ниже приведен веб-сайт для проверки лата и лонга с хорошим ответом json.
Спасибо всем.
Я также попробовал следующий пример здесь: http://ronaldrosiernet.azurewebsites.net/Blog/2013/12/07/posting_urlencoded_key_values_with_httpclient
Но дает мне следующую ошибку.
Exception thrown: 'System.NullReferenceException'
Я изменил код для этого:
public async Task<string> HTTPPOST(string lon, string lat)
{
var client = new HttpClient();
client.BaseAddress = new Uri(BASEURL);
var request = new HttpRequestMessage(HttpMethod.Post, "");
var keyValues = new List<KeyValuePair<string, string>>();
keyValues.Add(new KeyValuePair<string, string>("x", lon));
keyValues.Add(new KeyValuePair<string, string>("y", lat));
keyValues.Add(new KeyValuePair<string, string>("units", "feet"));
keyValues.Add(new KeyValuePair<string, string>("output", "json"));
request.Content = new FormUrlEncodedContent(keyValues);
var response = await client.SendAsync(request);
return response.ToString();
}
2 ответа
После отладки в течение часа я заметил, что в качестве параметра у меня были единицы измерения, а не единицы измерения:( ......
public string httpPostElevationRequest( string lon,string lat)
{
try
{
using (WebClient client = new WebClient())
{
byte[] response =
client.UploadValues(BASEURL, new NameValueCollection()
{
{ "x", lon },
{ "y", lat },
{"unit", "feet" },
{"output","json" },
});
string result = System.Text.Encoding.UTF8.GetString(response);
responseString = result;
}
return responseString;
}
catch(Exception eX)
{
return null;
}
}
Также baseurl выглядит следующим образом:
private string BASEURL = "https://nationalmap.gov/epqs/pqs.php";