C# - REST-API-Aufrufen Arbeiten Briefträger, NICHT im Code
Habe ich einige bestehende code, der bei der Arbeit war und alle-von-a-plötzliche beenden.
Ich kann nicht herausfinden, warum...
Hier ist mein code:
public static string RequestToken(string u, string pw)
{
string result = string.Empty;
string strUrl = "https://xxx.cloudforce.com/services/oauth2/token?grant_type=password&client_id=XXXX&client_secret=XXXX&username=" + u + "&password=" + pw;
HttpWebRequest tokenRequest = WebRequest.Create(strUrl) as HttpWebRequest;
Debug.Print(strUrl);
tokenRequest.Method = "POST";
try
{
using (HttpWebResponse tokenResponse = tokenRequest.GetResponse() as HttpWebResponse)
{
if (tokenResponse.StatusCode != HttpStatusCode.OK)
throw new Exception(String.Format(
"Server error (HTTP {0}: {1}).",
tokenResponse.StatusCode,
tokenResponse.StatusDescription));
DataContractJsonSerializer jsonSerializer2 = new DataContractJsonSerializer(typeof(ResponseAuthentication));
object objTokenResponse = jsonSerializer2.ReadObject(tokenResponse.GetResponseStream());
ResponseAuthentication jsonResponseAuthentication = objTokenResponse as ResponseAuthentication;
result = jsonResponseAuthentication.strAccessToken;
}
}
catch (Exception ex)
{
Debug.Print(ex.InnerException.ToString());
}
return result;
}
Ich bin jetzt immer ein 500 Internal Server Error
wo vor dieser Arbeit war sauber.
Wenn ich versuche zu Debuggen über Briefträger, gebe ich die URL direkt und es funktioniert gut. Sogar, wenn ich ein stop in den code, und verwenden Sie die exakt gleiche URL, die dann nicht vom code aus, funktioniert es in Briefträger, aber nicht in C#.
Sich der Postbote, ich bekomme eine ordentliche...
{
"access_token": "XXXXXX",
"instance_url": "https://xxx.cloudforce.com",
"id": "https://login.salesforce.com/id/XXXXXX",
"token_type": "Bearer",
"issued_at": "XXXXXX",
"signature": "XXXXXX"
}
Zu verdeutlichen, habe ich versucht, eine GET
Anfrage statt POST
und ich erhalte die folgende Antwort (in Postman):
{
"error": "invalid_request",
"error_description": "must use HTTP POST"
}
Irgendwelche Ideen hier?
- sind Sie sicher, dass Methode geben sollte 'POST' ?
- ja, das ist, was ich im Postman zu BEKOMMEN... funktioniert NICHT.
- was ist Anfrage.contentType auf Briefträger Erfolg Fall?
- funktioniert mit jedem beliebigen content-type-in Postman.
form-data
,x-www-form-urlencoded
,raw
oderbinary
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, die Antwort war, dass Salesforce endete Ihre Unterstützung für TLS 1.0, das ist der default .NET 4.5.
In diesem link, die Sie erwähnen dies sollte geschehen, im Juli 2017, aber irgendwie traf es unsere Instanz zu früh.
https://help.salesforce.com/articleView?id=000221207&type=1
Wir haben später bestätigt, dass es funktionieren würde in .NET 4.6, aber NICHT 4,5...
Herausstellt .NET 4.6 standardmäßig über TLS 1.2.
War es eine sehr einfache Lösung, die dauerte eine LANGE Zeit, um herauszufinden,.
Hinzugefügt, diese eine Zeile code und es sofort funktionierte:
Hoffe, das hilft jemand anderen mit dem gleichen problem!!!
Ein wenig frustrierend, wenn eine so einfache one-line-Lösung, die Tage dauert, zu finden.