Как преобразовать ответ в json с помощью httpwebresponse?
У меня есть свой метод SendRequest, который возвращает класс HttpWebResponse, я хочу получить ответ в виде Json, когда использую его в своем методе Get request. Как я могу этого достичь?
Вот мой метод sendrequest сценарию
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; }
Вот вам способ
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); }
Вот мой метод тестирования
[Test] public void GetUser() { HttpWebResponse response = client.IsGet(baseURL, "/User", null, token); //trying to get the Json response here....??? }
Что я уже пробовал:
Я попытался создать класс обработчика ответов, чтобы преобразовать его в Json, но получил ошибку
"Newtonsoft.Json.JsonReaderException : Ошибка чтения JToken из JsonReader. Путь ", строка 0, позиция 0"
трассировка стека:
JToken.ReadFrom(JsonReader reader, настройки JsonLoadSettings)
JToken.Parse(String json, JsonLoadSettings settings)
JToken.Parse(String json)
Вот класс обработчика запросов
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; } }