.Net 网站管理员 API 对 URL 进行了错误的编码 (Google.Apis.Webmasters.v3)
.Net Webmaster API is incorrectly encoding URLs (Google.Apis.Webmasters.v3)
我一直在努力让新的 API 工作。我在执行查询时经常遇到这个错误:
解析 NaN 值时出错。路径 '',第 0 行,位置 0.
根据调查,我认为 .Net 代码未正确编码请求中的 URLs,未对斜杠 (/) 进行编码。这会更改请求 URL 路径并导致 404.
如果您从请求的 {site} 部分省略 http:// 部分,它会起作用。例如domain.com 不是 http://domain.com/
如果您使用 https 站点,则没有解决方法。您也不能发出任何要求您在主页外传递特定 URL 的请求,因为它需要包含斜杠 (/)。
这就是我在 Google 地理编码 API 中的做法。不确定这是否对您有帮助,但希望您能理解。
public static string Sign(string url, string keyString)
{
ASCIIEncoding encoding = new ASCIIEncoding();
// converting key to bytes will throw an exception, need to replace '-' and '_' characters first.
string usablePrivateKey = keyString.Replace("-", "+").Replace("_", "/");
byte[] privateKeyBytes = Convert.FromBase64String(usablePrivateKey);
Uri uri = new Uri(url);
byte[] encodedPathAndQueryBytes = encoding.GetBytes(uri.LocalPath + uri.Query);
// compute the hash
HMACSHA1 algorithm = new HMACSHA1(privateKeyBytes);
byte[] hash = algorithm.ComputeHash(encodedPathAndQueryBytes);
// convert the bytes to string and make url-safe by replacing '+' and '/' characters
string signature = Convert.ToBase64String(hash).Replace("+", "-").Replace("/", "_");
// Add the signature to the existing URI.
return uri.Scheme + "://" + uri.Host + uri.LocalPath + uri.Query + "&signature=" + signature;
}
正在此处跟踪此问题:
https://github.com/google/google-api-dotnet-client/issues/534
与使用.Net 4.0有关,升级到.Net 4.5即可解决
我一直在努力让新的 API 工作。我在执行查询时经常遇到这个错误:
解析 NaN 值时出错。路径 '',第 0 行,位置 0.
根据调查,我认为 .Net 代码未正确编码请求中的 URLs,未对斜杠 (/) 进行编码。这会更改请求 URL 路径并导致 404.
如果您从请求的 {site} 部分省略 http:// 部分,它会起作用。例如domain.com 不是 http://domain.com/
如果您使用 https 站点,则没有解决方法。您也不能发出任何要求您在主页外传递特定 URL 的请求,因为它需要包含斜杠 (/)。
这就是我在 Google 地理编码 API 中的做法。不确定这是否对您有帮助,但希望您能理解。
public static string Sign(string url, string keyString)
{
ASCIIEncoding encoding = new ASCIIEncoding();
// converting key to bytes will throw an exception, need to replace '-' and '_' characters first.
string usablePrivateKey = keyString.Replace("-", "+").Replace("_", "/");
byte[] privateKeyBytes = Convert.FromBase64String(usablePrivateKey);
Uri uri = new Uri(url);
byte[] encodedPathAndQueryBytes = encoding.GetBytes(uri.LocalPath + uri.Query);
// compute the hash
HMACSHA1 algorithm = new HMACSHA1(privateKeyBytes);
byte[] hash = algorithm.ComputeHash(encodedPathAndQueryBytes);
// convert the bytes to string and make url-safe by replacing '+' and '/' characters
string signature = Convert.ToBase64String(hash).Replace("+", "-").Replace("/", "_");
// Add the signature to the existing URI.
return uri.Scheme + "://" + uri.Host + uri.LocalPath + uri.Query + "&signature=" + signature;
}
正在此处跟踪此问题:
https://github.com/google/google-api-dotnet-client/issues/534
与使用.Net 4.0有关,升级到.Net 4.5即可解决