我正在用Xamarin.Form编写一个天气预报应用程序。我正在使用Yahoo API。我可以通过城市名称参数来获取天气信息。但是,当我将代码更改为使用经度和纬度时,天气不会出现。
要下载天气,我使用页面中的示例:https://developer.yahoo.com/weather/documentation.html#oauth-csharp
我用以下方式处理它:
lSign = string.Format(
"format={0}&" +
"lat={1}&" +
"lon={2}&" +
"oauth_consumer_key={3}&" +
"oauth_nonce={4}&" +
"oauth_signature_method={5}&" +
"oauth_timestamp={6}&" +
"oauth_version={7}&" +
"u={8}",
cFormat,
szerokosc,
dlugosc,
cConsumerKey,
lNonce,
cOAuthSignMethod,
lTimes,
cOAuthVersion,
jednostka.ToString().ToLower()(...)
url = cURL + "?lat=" + szerokosc + "&lon=" + dlugosc + "&u=" + jednostka.ToString().ToLower() + "&format=" + cFormat;发布于 2019-05-27 17:33:35
根据文档,lSign用于身份验证。不应对其进行更改,请从字符串中删除这些"lat={1}&" + "lon={2}&"。
它说,请不要在没有重新排序的情况下简单地更改任何参数值。
位置信息应该包含在请求url中,并且授权信息被添加在头部中。
// Add Authorization
lClt.Headers.Add ( "Authorization", _get_auth () );
// The request URL
lURL = cURL + "?" + "lat=" + szerokosc + "&lon=" + dlugosc + "&format=" + cFormat;发布于 2019-05-27 22:48:24
不幸的是,简单地从变量lSign中删除" lat = {1} & " + " lon = {2} & "并不能解决问题。
例如,要通过我使用的城市名称获取天气数据:
lSign = string.Format(
"format={0}&" +
"location={1}&" +
"oauth_consumer_key={2}&" +
"oauth_nonce={3}&" +
"oauth_signature_method={4}&" +
"oauth_timestamp={5}&" +
"oauth_version={6}&" +
"u={7}",
cFormat,
miasto,
cConsumerKey,
lNonce,
cOAuthSignMethod,
lTimes,
cOAuthVersion,
jednostka.ToString().ToLower()和
url = cURL + "?location=" + Uri.EscapeDataString(miasto) + "&u=" + jednostka.ToString().ToLower() + "&format=" + cFormat;和
string headerString = _get_auth();
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/" + cFormat;
webClient.Headers[HttpRequestHeader.Authorization] = headerString;
webClient.Headers.Add("X-Yahoo-App-Id", cAppID);
byte[] reponse = webClient.DownloadData(url);
string lOut = Encoding.ASCII.GetString(reponse);https://stackoverflow.com/questions/56312232
复制相似问题