URLConnection尚未完成获取InputStream的操作

疯狂的

我创建了与身份验证服务器(OAuth 2.0)的连接以获取令牌。执行此操作的方法如下:

public static async Task<String> GetToken(string username, string password)
        {
            String response = null;

            await Task.Run(() =>
            {
                URL url = new URL(Configuration.Configuration.baseURL + Configuration.Configuration.tokenPath);
                HttpURLConnection urlConnection = (HttpURLConnection)url.OpenConnection();
                urlConnection.DoOutput = true;
                urlConnection.DoInput = true;
                urlConnection.RequestMethod = "POST";
                urlConnection.SetRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                var content = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("grant_type", "password"),
                    new KeyValuePair<string, string>("username", username),
                    new KeyValuePair<string, string>("password", password),
                    new KeyValuePair<string, string>("client_id", "widas_servicebar"),
                    new KeyValuePair<string, string>("scope", Configuration.Configuration.scopes)
                });

                //var content = new Dictionary<string, string>();
                //content.Add("grant_type", "password");
                //content.Add("username", username);
                //content.Add("password", password);
                //content.Add("client_id", "widas_servicebar");
                //content.Add("scope", Configuration.Configuration.scopes);

                using (var streamWriter = new StreamWriter(urlConnection.OutputStream))
                {
                    streamWriter.Write(content);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                urlConnection.Connect();
                var stream = urlConnection.InputStream;
                using (var streamReader = new StreamReader(stream))
                {
                    response = streamReader.ReadToEnd();                    
                    return response;
                }
            });
            return response;
        }

不幸的是,当我调试代码时,它总是被卡住,var stream = urlConnection.InputStream;从那里一直没有任何反应(我尝试等待15分钟,然后使用Postman,请求会在200-500ms之内得到响应)。

我将几乎相同的代码用于其他一些方法,这些方法也建立了到服务器(内容服务器)的连接,并且这些方法正常工作。

我的代码中是否有任何错误,或者输入流无法完成的原因可能是什么?

如果有任何重要性:我正在构建一个Xamarin.Android项目。

疯狂的

我知道了。似乎我尝试使用的东西没有按我认为的那样起作用。现在工作的代码如下所示:

public static async Task<String> GetToken(string username, string password)
        {
            String response = null;

            await Task.Run(() =>
            {
                URL url = new URL(Configuration.Configuration.baseURL + Configuration.Configuration.tokenPath);
                HttpURLConnection urlConnection = (HttpURLConnection)url.OpenConnection();
                urlConnection.DoOutput = true;
                urlConnection.DoInput = true;
                urlConnection.RequestMethod = "POST";
                urlConnection.SetRequestProperty("Content-Type", "application/x-www-form-urlencoded");                            

                var content = new Dictionary<string, string>();
                content.Add("grant_type", "password");
                content.Add("username", username);
                content.Add("password", password);
                content.Add("client_id", "widas_servicebar");
                content.Add("scope", Configuration.Configuration.scopes);

                Stream os = urlConnection.OutputStream;
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                writer.Write(getQuery(content));
                writer.Flush();
                writer.Close();
                os.Close();

                urlConnection.Connect();
                //var debug = urlConnection.ErrorStream;
                var stream = urlConnection.InputStream;

                using (var streamReader = new StreamReader(stream))
                {
                    response = streamReader.ReadToEnd();                    
                }
                return response;
            });
            return response;
        }

getQuery方法如下所示:

private static String getQuery(Dictionary<string, string> dictionary)
        {
            StringBuilder result = new StringBuilder();
            bool first = true;

            foreach (KeyValuePair<string, string> entry in dictionary)
            {      
                if (first)
                {
                    first = false;
                }          
                result.Append(URLEncoder.Encode(entry.Key, "UTF-8"));
                result.Append("=");
                result.Append(URLEncoder.Encode(entry.Value, "UTF-8"));
                result.Append("&");
            }

            return result.ToString();
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SVN错误“先前的操作尚未完成”

来自分类Dev

System.InvalidOperationException:异步操作尚未完成

来自分类Dev

dispatch_async尚未完成

来自分类Dev

“调试正在停止”,但尚未完成

来自分类Dev

Foundation 5构建尚未完成

来自分类Dev

JEST with Express尚未完成

来自分类Dev

ExecuteReader:连接属性尚未完成

来自分类Dev

Netbeans尚未完成创建项目

来自分类Dev

超时已到期,并且服务管理器中的操作尚未完成

来自分类Dev

获取每秒开始但尚未完成的所有行的运行计数和值总和

来自分类Dev

如果尚未完成动画,如何立即完成动画?

来自分类Dev

Rails循环未完成操作

来自分类Dev

当Mouseenter尚未完成时,Mouseleave不会触发

来自分类Dev

jQuery animate()尚未完成动画制作

来自分类Dev

安装12.04后PC尚未完成重启过程

来自分类Dev

如果功能尚未完成,请使用超时返回

来自分类Dev

查询今天尚未完成调查的用户并收到错误

来自分类Dev

从订阅获得未定义的属性尚未完成

来自分类Dev

安装12.04后PC尚未完成重启过程

来自分类Dev

恢复购买的应用程序尚未完成

来自分类Dev

引导尚未完成。请稍后再试

来自分类Dev

引导尚未完成。请稍后再试

来自分类Dev

Ode23尚未完成执行

来自分类Dev

请求尚未完成,mongoDB 和 Express 出错

来自分类Dev

java.lang.IllegalStateException:任务尚未完成

来自分类Dev

单击时删除搜索操作(未完成操作)

来自分类Dev

活动未完成

来自分类Dev

更新未完成

来自分类Dev

startAnimatingWithImagesInRange未完成