2016-07-20 5 views
4

HINWEIS: Ich habe noch nie zuvor vb.net-Code geschrieben. Ich habe nach einer Lösung gegoogelt, aber nichts gefunden, was funktioniert hat.VB.NET - Salesforce-POST-Anfrage gibt 400 fehlerhaften Anforderungsfehler zurück

Ich versuche, Zugriffstoken von Salesforce zu erhalten. Unten Code arbeitete nur gestern. Und ich habe keine Ahnung, warum es heute nicht funktioniert. Ich habe versucht, Content-Typ wie Anwendung/x-www-Form-urlencoded hinzuzufügen, aber es hat auch nicht funktioniert. Wenn ich curl benutze, bekomme ich Zugangstoken. Ich bin auch in der Lage, Zugriffstoken mit erweiterten Rest-Client in Google Chrome zu erhalten. Irgendwelche Ideen, warum es zurückgeht 400 Falsche Anfrageunbekannter Fehler versuchen Sie erneut Ihre Anfrage?

Imports System.Collections.Specialized 
Imports System.Net 
Imports System.Text 

Module Module1 

Sub Main() 
    Dim clientId As String = "clientId" 
    Dim clientSecret As String = "clientSecret" 
    Dim redirectUri As String = "https://test.salesforce.com" 
    Dim environment As String = "https://test.salesforce.com" 
    Dim tokenUrl As String = "" 
    Dim username As String = "[email protected]" 
    Dim password As String = "passwordtoken" 
    Dim accessToken As String = "" 
    Dim instanceUrl As String = "" 

    Console.WriteLine("Getting a token") 

    tokenUrl = environment + "/services/oauth2/token" 
    Dim request As WebRequest = WebRequest.Create(tokenUrl) 

    Dim values As NameValueCollection = New NameValueCollection() 
    values.Add("grant_type", "password") 
    values.Add("client_id", clientId) 
    values.Add("client_secret", clientSecret) 
    values.Add("redirect_uri", redirectUri) 
    values.Add("username", username) 
    values.Add("password", password) 

    request.Method = "POST" 

    Try 
     Dim client = New WebClient() 
     Dim responseBytes As Byte() = client.UploadValues(tokenUrl, "POST", values) 
     Dim response As String = Encoding.UTF8.GetString(responseBytes) 
     Console.WriteLine(response) 
     Console.ReadKey() 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
     Console.WriteLine("Press any key to close") 
     Console.ReadKey() 
    End Try 

End Sub 

End Module 
+0

Was im Antworttext ist, wenn Sie die 400 Antwort erhalten? – superfell

+0

Ich habe versucht Ausgabe ResponseBytes, aber es zeigt Null. Auch der Debugging-Modus zeigt es als Null an. – tugce

+0

Ich habe das seit Jahren nicht mehr verwendet, aber von dem, woran ich mich erinnere, gibt es eine spezielle Ausnahme, die Sie fangen, und es gibt Ihnen Zugriff auf den Antworttext für diesen Fehlerzustand. – superfell

Antwort

10

Nun, das war appearently Problem über TLS Versionskonflikt. Alle Salesforce-Sandboxen verweigern TLS 1.0-Verbindungen. Unser vb.net-Testcode verwendete TLS 1.0 und gab somit einen Fehler zurück. Es wäre großartig, wenn Salesforce besseren Fehlercode zurückgeben würde.

Alles, was ich tun musste, war eine einzige Zeile Code auf dem Codeblock hinzu:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 
Verwandte Themen