使用WebRequest将C#从完整框架转换为核心

时间:2017-12-28 06:24:11

标签: c# .net .net-core

我对C#并不是太棒了,但我希望有人可以帮我处理我的代码片段。 第一个在C#完整.net框架中正常工作,第二个是我尝试将第一个更改为dotnet核心(标准1.3),但它只是不起作用,似乎是barf out with“(stream stream = response.GetResponseStream())”with“" errorMessage":"远程服务器返回error: (400)错误请求。",但没有想法为什么。 我认为它与*异步调用有关,但实际上并不确定。

非常感谢,非常感谢帮助。

public static string AcquireTokenBySpn(string tenantId, string clientId, string clientSecret)
        {
            var payload = String.Format(SpnPayload, WebUtility.UrlEncode(ArmResource), WebUtility.UrlEncode(clientId),
                WebUtility.UrlEncode(clientSecret));

            byte[] data = Encoding.ASCII.GetBytes(payload);

            var address = String.Format(TokenEndpoint, tenantId);
            WebRequest request = WebRequest.Create(address);
            request.Method = "POST";

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            string responseContent = null;

            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    if (stream != null)
                        using (StreamReader sr99 = new StreamReader(stream))
                        {
                            responseContent = sr99.ReadToEnd();
                        }
                }
            }

            JObject jObject = JObject.Parse(responseContent);

            return (string)jObject["access_token"];
        }

这是" 核心代码段"。

    public static async Task<string> AcquireTokenBySpn(string tenantId, string clientId, string clientSecret, double apiVersion)
    {
      var payload = String.Format(SpnPayload, WebUtility.UrlEncode(clientId),
        WebUtility.UrlEncode(clientSecret));

      var data = Encoding.ASCII.GetBytes(payload);

      var address = String.Format(TokenEndpoint, tenantId, apiVersion);

      WebRequest request = WebRequest.Create(address);

      request.Method = "POST";
      request.ContentType = "application/x-www-form-urlencoded";
      //request. ContentLength = data.Length;
      using (Stream stream = await request.GetRequestStreamAsync())
      {
        stream.Write(data, 0, data.Length);
      }

      string responseContent = null;

      using (WebResponse response = await request.GetResponseAsync())
      {
        using (Stream stream = response.GetResponseStream())
        {
          if (stream != null)
            using (StreamReader sr99 = new StreamReader(stream))
            {
              responseContent = sr99.ReadToEnd();
            }
        }
      }

      JObject jObject = JObject.Parse(responseContent);

      return (string)jObject["access_token"];
    }
  }

1 个答案:

答案 0 :(得分:0)

错误肯定与GetResponseAsync()有关。你需要检查一下那里发生了什么。 BTW。使用.NETCore 2.0而不是1.3更好,因为它支持.NET标准2.0库,因为它具有更强大的库支持。