I have created an application in Xamrin forms with Visual studio 2017 Professional and Visual studio 2019 cumulative addition.
Problem is that app works fine with HTTP request, but in case of HTTPS request i have got time out every time with visual studio 2017 & with visual studio 2019 i have observed sometime getting response of request and sometime app not able to hit HTTPS request.
I have same code to call API. I am able to post WEB API with Postman every time successfully.
HttpStatusCode = HttpStatusCode.Unused; HttpStatusCodeDescription = String.Empty; var response = default(TResp); XStatusCode = null; HttpWebRequest webRequest = null; HttpWebResponse webResponse = null; webRequest = (HttpWebRequest)WebRequest.Create(mServiceUrl + serviceName); webRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ":" + password))); webRequest.Method = "POST"; var reqData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request)); webRequest.ContentLength = reqData.Length; webRequest.ContentType = "application/json; charset=utf-8"; using (var reqStream = webRequest.GetRequestStream()) reqStream.Write(reqData, 0, reqData.Length); try { using (webResponse = (HttpWebResponse)webRequest.GetResponse()) { if (typeof(TResp) != typeof(object)) { using (var respStream = webResponse.GetResponseStream()) { var reader = new StreamReader(respStream); string result = reader.ReadToEnd(); response = JsonConvert.DeserializeObject<TResp>(result); } } HttpStatusCode = webResponse.StatusCode; HttpStatusCodeDescription = webResponse.StatusDescription; } } catch (WebException ex) { webResponse = (HttpWebResponse)ex.Response; if (webResponse != null) { HttpStatusCode = ((HttpWebResponse)webResponse).StatusCode; HttpStatusCodeDescription = ((HttpWebResponse)webResponse).StatusDescription; if (webResponse.Headers["X-StatusCode"] != null) { XStatusCode = int.Parse(webResponse.Headers["X-StatusCode"]); if (webResponse.ContentLength > 0) { if (typeof(TResp) != typeof(object)) { using (var respStream = webResponse.GetResponseStream()) { var reader = new StreamReader(respStream); string result = reader.ReadToEnd(); response = JsonConvert.DeserializeObject<TResp>(result); } } } } webResponse.Close(); } } return response;
Tried out with Http Client also getting same result
HttpStatusCode = HttpStatusCode.Unused;
HttpStatusCodeDescription = String.Empty;
var result = default(TResp); XStatusCode = null; try { var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ":" + password))); var json = JsonConvert.SerializeObject(request); HttpContent content = new StringContent(json); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = await client.PostAsync(mServiceUrl + serviceName, content); if (response.IsSuccessStatusCode) { result = JsonConvert.DeserializeObject<TResp>(response.Content.ToString()); } } catch (WebException ex) { var webResponse = (HttpWebResponse)ex.Response; if (webResponse != null) { HttpStatusCode = ((HttpWebResponse)webResponse).StatusCode; HttpStatusCodeDescription = ((HttpWebResponse)webResponse).StatusDescription; if (webResponse.Headers["X-StatusCode"] != null) { XStatusCode = int.Parse(webResponse.Headers["X-StatusCode"]); if (webResponse.ContentLength > 0) { if (typeof(TResp) != typeof(object)) { using (var respStream = webResponse.GetResponseStream()) { var reader = new StreamReader(respStream); string resulttmp = reader.ReadToEnd(); result = JsonConvert.DeserializeObject<TResp>(resulttmp); } } } } webResponse.Close(); } } return result;
PCL package
Android package