0

在(显然)新的回调 URL 下将其部署到生产环境后,一直在“localhost”环境中工作的代码失败。没有其他任何改变。向 SurveyMonkey 的 API 请求交换授权码以获得长期访问令牌的请求返回此错误:

System.Net.WebException:基础连接已关闭:发送时发生意外错误。---> System.IO.IOException:从传输流接收到意外的 EOF 或 0 字节。

是否还有其他需要更改的地方,也许是生产client_id?请告知,我们被卡住了。

这是代码:

        var clientId = _sds.ByName("SurveyMonkeyClientID").Value;
        var apiSecret = _sds.ByName("SurveyMonkeyAPISecret").Value;
        var callbackURL = _sds.ByName("SurveyMonkeyCallbackURL").Value;
        var accessTokenUri = "https://api.surveymonkey.net/oauth/token?api_key=" + _sds.ByName("SurveyMonkeyAPIKey").Value;

        // Create postback data
        var postData = new NameValueCollection()
        {
            { "client_secret", apiSecret },
            { "code", authorizationCode },
            { "redirect_uri", callbackURL },
            { "client_id", clientId },
            { "grant_type", "authorization_code" }
        };

        var queryString = string.Join("&", (
            from key in postData.AllKeys
            from value in postData.GetValues(key)
            select string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value))).ToArray()
        );

        // Create and configure the web request object
        var request = WebRequest.Create(accessTokenUri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        var dataStream = request.GetRequestStream();

        var postArray = Encoding.UTF8.GetBytes(queryString);
        dataStream.Write(postArray, 0, postArray.Length);
        dataStream.Close();

        // Make the call to Survey Monkey's token exchange uri
        try
        {
            var response = request.GetResponse();
            dataStream = response.GetResponseStream();
            var reader = new StreamReader(dataStream);
            var responseFromServer = reader.ReadToEnd();
            reader.Close();
            dataStream.Close();
            response.Close();

            SaveSurveyMonkeyJsonWhole(responseFromServer);
            dynamic jobject = _serializer.DeserializeObject(responseFromServer);
            var access_token = jobject["access_token"];
            return access_token;
        }
        catch (Exception ex)
        {
            ErrorSignal.FromCurrentContext().Raise(ex);
            return string.Empty;
        }
4

0 回答 0