2017-12-28 11 views
0

私はC#ですごくうまくはありませんが、ここで自分のコードスニペットを手伝ってもらえると願っていました。 最初のものはC#フル.netフレームワークで正常に動作し、2番目のものは最初にdotnetコア(標準1.3)に変更しようとしたところですが、動作しません。 = response.GetResponseStream()) "" errorMessage ":"リモートサーバーはerror: (400) Bad Requestを返しました。 " *非同期呼び出しとは関係がありますが、実際はわかりません。WebRequestを使用してC#をフルフレームワークからコアに変換する

ご協力いただきありがとうございます。

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"]; 
    } 
    } 
+0

リクエストのURLと本文が正しいかどうかを確認しましたか?私は\tのコードが 'payload'と' address'が同じではないことに気付きました。 – skyoxZ

答えて

0

エラーは確かにGetResponseAsync()に関連しています。あなたは何が起きているのかを確認する必要があります。 BTW。 .NET Standard 2.0ライブラリをサポートしているため、ライブラリのサポートが充実しているため、1.3よりも.NETCore 2.0を使用するほうがはるかに優れています。

+0

IIRCがまだ2.0をサポートしていないAWS Lambdaの内部を実行しています。 –

+0

AWSサーバーレス機能で実行するプラットフォームを選択できます。私は確かにAzure関数でそのようなオプションを見ていませんでした。 –

関連する問題