一些.从Azure网站访问时登录无效



我开发了一个ASP。. NET MVC web应用程序访问位。如何缩短网址。我使用了。net NuGet库。Net就像Bit中提到的那样。代码参考。

在我的本地机器上都运行良好,无论是在单元测试中还是在本地运行Web应用程序时。然而,当我将它部署到Azure时,它失败了。不幸的是,Bitly的。Net没有给出一个有用的错误反馈,但正如这个SO答案所示,它很容易写你自己的,所以我做了。

现在在调用缩短命令时,我得到一个错误代码500,错误文本说'无效登录'。

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

是否有人访问过该位。Azure的ly API ?CORS会是个问题吗?如有任何建议,不胜感激。

我给bit发了邮件。Ly API支持(api@bitly.com),他们友好地回来说:

INVALID_LOGIN错误指示您提供了不正确的' login '或不正确的' apiKey '参数。

奇怪的是我已经检查了' login '和' apiKey '参数通过登录和下载web。从Azure配置。然而,这一点。ly支持人员建议我使用固定的OAuth Token(阅读链接页面上的顶部粗体以了解更多信息)。

这允许您一次获得Token,然后在所有请求中使用它,这使得使用OAuth变得容易。我切换到OAuth,它工作了!

如果这对某人有用,这里是代码,基于@devfunkd实现,但更新为:

  • 使用固定的OAuth令牌进行验证
  • 使用位。ly的V3 API,它有一个更好的json格式。
  • 使用Json。. NET json反序列化器
  • 我使它异步。

注意,在代码中,字段_bitlyToken应该包含通过转到该页创建的令牌。_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;
    }
}

相关内容

  • 没有找到相关文章

最新更新