从Azure网站

时间:2015-09-23 13:42:44

标签: .net azure bit.ly

我开发了一个ASP.NET MVC Web应用程序,可以访问bit.ly来缩短网址。我使用了Bit.ly Bitly.Net中引用的.NET NuGet库Code Reference

在我的本地计算机上,无论是在单元测试中还是在本地运行Web应用程序时,一切正常。但是,当我将其部署到Azure时,它失败了。不幸的是,Bitly.Net没有给出有用的错误反馈,但是this SO answer显示你很容易自己写,所以我做了。

现在,在调用shorten command时,我收到的错误代码为500,错误文字显示为“无效登录”。

我正在使用折旧身份验证方法,但查看 documentation on shorten确实说我可以使用该身份验证方法,并且它在本地工作,所以不是这样。我可以切换到新的OAuth身份验证,但我认为它会有同样的问题。

有没有人从Azure访问过bit.ly API? CORS会成为一个问题吗?感激地收到任何建议。

1 个答案:

答案 0 :(得分:3)

好的,我实际上通过电子邮件发送了bit.ly api支持(api@bitly.com),他们很友好地回来了,他们说:

  

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 deserialiser。
  • 我把它变成了异步。

请注意,在代码中,字段_logger应包含通过转到this page创建的令牌。 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; } } 变量包含记录器,以便记录错误。

*.cpython-34m.so

我希望能帮助别人。