I have my SendRequest method that returns HttpWebResponse class, I want to get the response as Json when I use it in my Get request method. How can I achieve this?
Here is my SendRequest method
private HttpWebResponse SendRequest(HttpWebRequest request, string queryParams, string token)
{
HttpWebResponse response = null;
if(token != null)
{
request.Headers.Add("Authorization", "Bearer " + token);
}
request.ContentType = "application/json";
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException wex)
{
if (wex.Response == null)
throw new WebException(wex.StackTrace);
using (var errorResponse = (HttpWebResponse)wex.Response)
{
using (var reader = new StreamReader(errorResponse.GetResponseStream()))
{
throw new Exception(reader.ReadToEnd()); //expected error from JSON
}
}
}
var responseVal = new StreamReader(stream: response.GetResponseStream()).ReadToEnd();
return response;
}
Here is GET Method
public HttpWebResponse IsGet(string baseURL, string basePath, string queryParams, string token)
{
var request = (HttpWebRequest)WebRequest.Create(baseURL+basePath+queryParams);
request.Method = "GET";
return SendRequest(request, queryParams, token);
}
Here is my Test method
[Test]
public void GetUser()
{
HttpWebResponse response = client.IsGet(baseURL, "/User", null, token);
//trying to get the Json response here....???
}
What I have tried:
I have tried to create a Response Handler class to convert it to Json but I get an error
"Newtonsoft.Json.JsonReaderException : Error reading JToken from JsonReader. Path '', line 0, position 0"
Stack Trace:
JToken.ReadFrom(JsonReader reader, JsonLoadSettings settings)
JToken.Parse(String json, JsonLoadSettings settings)
JToken.Parse(String json)
Here is the request Handler Class
public class ResponseHandler
{
public Stream unEncodedResponseStream;
public StreamReader reader;
public JContainer jsonResponseContainer;
public HttpWebResponse responsePassedIn;
public string responseAsJsonString;
public Stream UnEncodeResponseStream()
{
// Unencode your response stream or, if it is not encoded, return it.
var responseStream = responsePassedIn.GetResponseStream();
if (responsePassedIn.ContentEncoding.ToLower().Contains("gzip"))
unEncodedResponseStream = new GZipStream(responseStream, CompressionMode.Decompress);
else if (responsePassedIn.ContentEncoding.ToLower().Contains("deflate"))
unEncodedResponseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
else
unEncodedResponseStream = responseStream;
return unEncodedResponseStream;
}
public string ConvertResponseStreamToString(HttpWebResponse webResponse)
{
// Unencode Response Stream.
responsePassedIn = webResponse;
var responseStream = UnEncodeResponseStream();
// Convert the response to a JSON string.
reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
return reader.ReadToEnd();
}
public JContainer ConvertResponseToJson(HttpWebResponse response)
{
string localString;
if (response.ContentEncoding.Contains("application/xml"))
{
// Convert the escaped Stream into an XML document.
ConfigXmlDocument xmlDocument = new ConfigXmlDocument();
xmlDocument.LoadXml(ConvertResponseStreamToString(response));
// Now convert the properly-escaped JSON for the response into a JContainer
localString = JsonConvert.SerializeXmlNode(xmlDocument);
}
else
localString = ConvertResponseStreamToString(response);
return JToken.Parse(localString) as JContainer;
}
}