ich möchte mittels NAV2017 ein Token von Azure holen. Jedoch funktioniert es nicht. Ich habe zuerst die Funktionen aus CU 1297 benutzt, jedoch ohne Erfolg. Also habe ich den Aufruf vereinfacht in C# umgesetzt und danach diesen in C/Al übertragen. In C# funktioniert der Aufruf. Aktuell stehe ich aber etwas auf dem Schlauch. Hat jemand eine Idee, woran es liegen könnte das es in NAV nicht funktioniert?
C/Al Code:
- Code: Alles auswählen
[TryFunction]
LOCAL PROCEDURE GetAuthToken2@1000000130();
VAR
URL@1000000000 : Text;
RequestBody@1000000007 : Text;
myRequest@1000000014 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";
RequestStream@1000000016 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.Stream";
AuthStreamWriter@1000000015 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.StreamWriter";
Encoding@1000000017 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.Encoding";
myResponse@1000000018 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
BEGIN
URL := 'https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxxx/oauth2/token';
myRequest := myRequest.Create(URL);
myRequest.Method := 'POST';
myRequest.ContentType := 'application/x-www-form-urlencoded';
myRequest.Timeout := 30000;
RequestStream := myRequest.GetRequestStream();
RequestBody := 'client_id=xxxxxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials&redirect_uri=https%3A%2F%2Flocalhost&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default';
AuthStreamWriter := AuthStreamWriter.StreamWriter(RequestStream,Encoding.UTF8);
AuthStreamWriter.Write(RequestBody);
AuthStreamWriter.Flush;
AuthStreamWriter.Close;
AuthStreamWriter.Dispose;
myResponse := myRequest.GetResponse;
END;
Fehler bei "myResponse := myRequest.GetResponse;":
Microsoft Dynamics NAV
---------------------------
Unterbrechen bei Fehlermeldung:
Fehler bei einem Aufruf von System.Net.HttpWebRequest.GetResponse mit folgender Meldung: Der Remoteserver hat einen Fehler zurĂĽckgegeben: (400) UngĂĽltige Anforderung.
---------------------------
OK
---------------------------
C# Code der das gewĂĽnschte Ergebnis erzielt :
- Code: Alles auswählen
public string GetAuthTokenResponse()
{
string URL = "https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxxx/oauth2/token";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Timeout = 30000;
Stream RequestStream = myRequest.GetRequestStream();
string RequestBody = "client_id=xxxxxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials&redirect_uri=https%3A%2F%2Flocalhost&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default";
StreamWriter AuthStreamWriter = new StreamWriter(RequestStream, Encoding.UTF8);
AuthStreamWriter.Write(RequestBody);
AuthStreamWriter.Flush();
AuthStreamWriter.Close();
AuthStreamWriter.Dispose();
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
Stream myResponseStream = myResponse.GetResponseStream();
StreamReader myReader = new StreamReader(myResponseStream, Encoding.UTF8);
return myReader.ReadToEnd();
}
Ich freu mich auf das Feedback.