Google की OAuth2 सेवा से जुड़ने का प्रयास करते समय मेरे पास समान मुद्दे थे।
मैंने इस तरह से, WebRequest का उपयोग न करके मैन्युअल रूप से POST लिखना समाप्त कर दिया:
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);
}
प्रतिक्रिया स्ट्रीम को लिखी जाने वाली प्रतिक्रिया में विशिष्ट त्रुटि पाठ होता है जो आपके बाद होता है।
विशेष रूप से, मेरी समस्या यह थी कि मैं url- एन्कोडेड डेटा टुकड़ों के बीच एंडलाइंस डाल रहा था। जब मैंने उन्हें बाहर निकाला, तो सब कुछ काम कर गया। आप अपनी सेवा से जुड़ने और वास्तविक प्रतिक्रिया त्रुटि पाठ को पढ़ने के लिए एक समान तकनीक का उपयोग करने में सक्षम हो सकते हैं।