HttpWebRequest返回(400)错误请求

3
请求返回以下错误: 远程服务器返回了一个错误:(400)错误请求。
我在互联网上找不到解决方案。有人知道如何解决吗?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://maps.googleapis.com/maps/api/geocode/json");
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            var parameters = string.Format("language={0}&latlng={1}&client={2}&signature={3}", "nl", "51.123456,5.612345", "gme-aa", "******_******=");

            byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            /*
             * Read HttpWeb Response
             */
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string Response = reader.ReadToEnd();
            response.Close();

编辑:

我正在使用低代码平台Outsystems进行工作。Outsystems在没有参数的情况下创建了Web请求中的URL。因此,我可以访问webRequest对象并需要传递参数。


2
错误请求意味着您发送的数据不符合端点所需的形式,以服务您的请求。如果不知道格式化后parameters的评估结果,并且没有谷歌API密钥进行测试,那么很难说。 - Crowcoder
2
是的,但浏览器创建了一个GET请求,而您的代码正在创建一个POST。 - Tamás Szabó
1
将参数添加到 WebRequest.Create() 有什么问题? - Dave Becker
我正在使用Lowcode平台Outsystems进行工作。Outsystems在WebRequest.Create()中创建URL时没有参数。因此,我可以访问webRequest对象并需要传递参数。 - beginner
显示剩余4条评论
2个回答

0
根据文档,API需要使用POST方法,并在URL中接收参数而不是请求体。
如果您正在使用OutSystems平台,则可以使用Consume REST API功能轻松调用Web服务而无需编写代码。按照以下方式配置您的API(您可以从上面的文档页面复制示例JSON):

enter image description here


0

你必须使用HTTP“GET”方法。

在GET请求中,你需要将参数作为查询字符串的一部分传递。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"https://maps.googleapis.com/maps/api/geocode/json?language=fr&latlng=51.123456,5.612345&key={apiKey}");
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    string result = new StreamReader(response.GetResponseStream()).ReadToEnd();
}

我正在使用Lowcode平台Outsystems进行工作。Outsystems在WebRequest.Create()中创建URL时没有参数。因此,我可以访问webRequest对象并需要传递参数。 - beginner
你能否尝试一下将HttpWebClient更改为WebClient的代码?WebRequest.Create($"https://maps.googleapis.com/maps/api/geocode/json?language=fr&latlng=51.123456,5.612345&key={apiKey}"); - Mehdi Kebdani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接