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.

https://nationalmap.gov/epqs/

Спасибо всем.

Я также попробовал следующий пример здесь: 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";

Используйте .NET HttpClient Найти пример здесь

Другие вопросы по тегам