J'ai rencontré des problèmes similaires en essayant de me connecter au service OAuth2 de Google.
J'ai fini par écrire le POST manuellement, sans utiliser WebRequest, comme ceci :
TcpClient client = new TcpClient("accounts.google.com", 443);
Stream netStream = client.GetStream();
SslStream sslStream = new SslStream(netStream);
sslStream.AuthenticateAsClient("accounts.google.com");
{
byte[] contentAsBytes = Encoding.ASCII.GetBytes(content.ToString());
StringBuilder msg = new StringBuilder();
msg.AppendLine("POST /o/oauth2/token HTTP/1.1");
msg.AppendLine("Host: accounts.google.com");
msg.AppendLine("Content-Type: application/x-www-form-urlencoded");
msg.AppendLine("Content-Length: " + contentAsBytes.Length.ToString());
msg.AppendLine("");
Debug.WriteLine("Request");
Debug.WriteLine(msg.ToString());
Debug.WriteLine(content.ToString());
byte[] headerAsBytes = Encoding.ASCII.GetBytes(msg.ToString());
sslStream.Write(headerAsBytes);
sslStream.Write(contentAsBytes);
}
Debug.WriteLine("Response");
StreamReader reader = new StreamReader(sslStream);
while (true)
{ // Print the response line by line to the debug stream for inspection.
string line = reader.ReadLine();
if (line == null) break;
Debug.WriteLine(line);
}
La réponse qui est écrite dans le flux de réponse contient le texte d'erreur spécifique que vous recherchez.
En particulier, mon problème était que je mettais des lignes de fin entre des données codées en url. Lorsque je les ai enlevées, tout a fonctionné. Vous pourriez utiliser une technique similaire pour vous connecter à votre service et lire le texte d'erreur de la réponse.
6 votes
J'ai vécu la même chose. J'ai soumis une suggestion à l'équipe .NET Framework. N'hésitez pas à voter pour elle : connect.microsoft.com/VisualStudio/feedback/details/575075/