好吧,其实我是通过电子邮件发送bit.ly API支持([email protected])和他们亲切地回来,他们说:
的INVALID_LOGIN错误表示要么你提供了不正确的“登录”或不正确'apiKey'参数。
奇怪的是我通过记录它们并从Azure下载web.config来检查'login'和'apiKey'参数。然而,bit.ly支持人员建议我使用fixed OAuth Token(请阅读链接页面上的粗体首行以获取更多信息)。
这可以让您获得一次令牌,然后在您的所有请求中使用它,这使得使用OAuth变得容易。 我换到了OAuth,它工作!
如果这是有人在这里有用的是代码,based on @devfunkd implementation但更新为:
- 使用固定的OAuth令牌进行验证。
- 使用bit.ly的V3 API,它具有更好的json格式。
- 它使用Json.NET json反序列化器。
- 我使它异步。
请注意,在代码中,字段_bitlyToken
应包含通过转到this page创建的令牌。 _logger
变量包含一个记录器,以便记录错误。
public async Task<string> ShortenAsync(string longUrl)
{
//with thanks to @devfunkd - see https://stackoverflow.com/questions/31487902/nuget-package-for-bitly-to-shorten-the-links
var url = string.Format("https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}",
_bitlyToken, HttpUtility.UrlEncode(longUrl));
var request = (HttpWebRequest) WebRequest.Create(url);
try
{
var response = await request.GetResponseAsync();
using (var responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonResponse = JObject.Parse(await reader.ReadToEndAsync());
var statusCode = jsonResponse["status_code"].Value<int>();
if (statusCode == (int) HttpStatusCode.OK)
return jsonResponse["data"]["url"].Value<string>();
//else some sort of problem
_logger.ErrorFormat("Bitly request returned error code {0}, status text '{1}' on longUrl = {2}",
statusCode, jsonResponse["status_txt"].Value<string>(), longUrl);
//What to do if it goes wrong? I return the original long url
return longUrl;
}
}
catch (WebException ex)
{
var errorResponse = ex.Response;
using (var responseStream = errorResponse.GetResponseStream())
{
var reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
var errorText = reader.ReadToEnd();
// log errorText
_logger.ErrorFormat("Bitly access threw an exception {0} on url {1}. Content = {2}", ex.Message, url, errorText);
}
//What to do if it goes wrong? I return the original long url
return longUrl;
}
}
我希望能帮到别人。
全面解答与链接非常赞赏。 – user3085342