【解決方法】GET および POST 呼び出しを httpwebresponse として返すことができるように、sendrequest メソッドで httpwebresponse を返すにはどうすればよいですか?

プログラミングQA


現在、送信リクエスト メソッドは文字列を返しますが、HttpWebResponse を返すようにする方法を知りたいので、GET、POST 呼び出しで Json として応答を取得できます。

これが私のSendRequestメソッドです

 public class RestClient{

private static string JSON_ERROR = "error";

private string 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)
                return JSON_ERROR;

                using (var errorResponse = (HttpWebResponse)wex.Response)
                {
                    using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                    {
                        return reader.ReadToEnd(); //expected error from JSON
                    }
                }
            }

            var responseVal = new StreamReader(stream: response.GetResponseStream()).ReadToEnd();

            return responseVal;
        }


}

Here is my GET and POST methods

 public string 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);
        }


        public string IsPost(string baseURL, string basePath, string queryParams, string json, string token)
        {
            var request = (HttpWebRequest)WebRequest.Create(baseURL+basePath+queryParams);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.Headers.Add("Authorization", "Bearer " + token);
            byte[] postBytes = Encoding.ASCII.GetBytes(json);
            request.ContentLength = postBytes.Length;
            var requestStream = request.GetRequestStream();
            requestStream.Write(postBytes, 0, postBytes.Length);
            requestStream.Close();

            return SendRequest(request, queryParams, token);
        }

私が試したこと:

次の解決策を試しましたが、GET または POST 呼び出しで応答を取得しようとすると、null になります。

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)
              //return JSON_ERROR;

              using (var errorResponse = (HttpWebResponse)wex.Response)
              {
                  using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                  {
                      //return reader.ReadToEnd(); //expected error from JSON
                  }
              }
          }

                             //response.GetResponseStream();
          var responseVal = new StreamReader(stream: response.GetResponseStream()).ReadToEnd();
           var json =  JsonConvert.DeserializeObject(responseVal);

          return json;
      }

解決策 1

「理由」を完全に理解しているかどうかはわかりませんが、質問が表現されているように、これがそのままの場合、文字列が返されます

private string SendRequest(HttpWebRequest request, string queryParams, string token)
    {
        ...
        return someString;
    }

それからこれ

private HttpWebResponse SendRequest(HttpWebRequest request, string queryParams, string token)
    {
        HttpWebResponse response
        ...
        return response;
    }

あなたが要求したことを行います….それがあなたの望むものでない場合は、元の質問を変更してください。「解決策」に回答を投稿しないでください

コメント

タイトルとURLをコピーしました