function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Andrew FandreAndrew Fandre 

C# REST GET works POST says invalid session

I sure hope I can get some help, or at least another set of eyes on my problem.
My GET Request from C# works fine and retrieves data all day long
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            string oauthToken, serviceUrl;

            HttpClient authClient = new HttpClient();
            HttpContent content = GetClientContent();
            string tokenString = ConfigurationManager.AppSettings["tokenUrl"];

            HttpResponseMessage message = await authClient.PostAsync(tokenString, content);

            string responseString = await message.Content.ReadAsStringAsync();

            JObject obj = JObject.Parse(responseString);
            oauthToken = (string)obj["access_token"];
            serviceUrl = (string)obj["instance_url"];

            string service = ConfigurationManager.AppSettings.Get("RestService") + "sobjects/Case/describe/";
            string fullRequest = serviceUrl + service;


            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, fullRequest);
            request.Headers.Add("Authorization", "Bearer " + oauthToken);
            request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            HttpClient queryClient = new HttpClient();
            HttpResponseMessage response = await queryClient.SendAsync(request);

            string result = await response.Content.ReadAsStringAsync();
But when I try a POST I get the dreaded [{\"message\":\"Session expired or invalid\",\"errorCode\":\"INVALID_SESSION_ID\"} 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            HttpClient authClient = new HttpClient();
            HttpContent authContent = GetClientContent();
            string tokenString = ConfigurationManager.AppSettings["tokenUrl"];

            HttpResponseMessage authMessage = await authClient.PostAsync(tokenString, authContent);

            string responseString = await authMessage.Content.ReadAsStringAsync();

            JObject requestObj = JObject.Parse(responseString);
            string oauthToken = (string)requestObj["access_token"];
            string serviceUrl = (string)requestObj["instance_url"];

            string service = ConfigurationManager.AppSettings.Get("RestService") + "sobjects/Case/";
            string fullRequest = serviceUrl + service; 

            HttpRequestMessage POSTRequest = new HttpRequestMessage(HttpMethod.Post, fullRequest);

            POSTRequest.Headers.Add("Authorization", "Bearer " + oauthToken);
            POSTRequest.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            var caseJSON = JsonConvert.SerializeObject(ru);
            POSTRequest.Content = new StringContent(caseJSON, Encoding.UTF8, "application/json");

            HttpClient postClient = new HttpClient();

            HttpResponseMessage svcResp = await postClient.PostAsync(fullRequest, POSTRequest.Content);
            string caseResult = await svcResp.Content.ReadAsStringAsync();
Can someone eyeball this and give me a tip or pointer?
 
Best Answer chosen by Andrew Fandre
Andrew FandreAndrew Fandre
I solved the problem. Instead of using PostAsync I need to use SendAsync. I also need to put the serialized JSON object into the request. 
This is the POST request properly formatted.
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, fullRequest);
            request.Headers.Add("Authorization", "Bearer " + oauthToken);

            request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            request.Content = new StringContent(caseJSON, Encoding.UTF8, "application/json"); 
            HttpClient postClient = new HttpClient();

            HttpResponseMessage result = await postClient.SendAsync(request);
            string caseResult = await result.Content.ReadAsStringAsync();