0 votes
1 view
in Salesforce by (11.9k points)

I have some existing code that was working and all-of-a-sudden quit.

I can't figure out why...

Here is my 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;

}

I am now getting a 500 Internal Server Error where before this was working cleanly.

When I try to debug using Postman, I pass the URL directly and it works fine. Even when I put a stop in the code and use the exact same URL that then fails from inside the code, it works in Postman, but not in C#.

Out of Postman, I get an orderly...

{

  "access_token": "XXXXXX",

  "instance_url": "https://xxx.cloudforce.com",

  "id": "https://login.salesforce.com/id/XXXXXX",

  "token_type": "Bearer",

  "issued_at": "XXXXXX",

  "signature": "XXXXXX"

}

To clarify, I have tried a GET request instead of POST and I receive the following response (in Postman):

{

  "error": "invalid_request",

  "error_description": "must use HTTP POST"

}

Any ideas here?

1 Answer

0 votes
by (31.8k points)

Alright, so this turns out .NET 4.6 defaults to using TLS 1.2.

It was a very easy fix. I just added this one line of code and it quickly worked:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Hope that helps someone else with the same problem!

Related questions

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...