为什么我的 API 开机自检请求一直失败



我正在执行API Post请求,但似乎无法使其工作。我总是收到一个 sendFailure 网络异常,并且异常的响应总是空的,因此捕获异常是没有用的。当我尝试获取httpWebResponse时,它会不断发生。我也注意到request.contentlength在postream getrequeststream上给出了错误,所以我把它注释掉了。Test.json 是我用于请求正文的文件。我还通过在标头中包含 URL、正文和内容类型在不同的 API 测试人员上对此进行了测试,它们工作了。我似乎无法为自己编码。凭据有效,我只是不知道我是否正确执行请求?

JSON 文件:

{
"email": "abc@123.com", 
"password": "12345", 
"facilityNumber": "987654"
}
string filepath = "test.json";
string result = string.Empty;
using (StreamReader r = new StreamReader(filepath))
{
   var json = r.ReadToEnd();
   var jobj = JObject.Parse(json);
   foreach (var item in jobj.Properties())
   {
      item.Value = item.Value.ToString().Replace("v1", "v2");
   }
   result = jobj.ToString();
   Console.WriteLine(result);
}
try
{
   string setupParameters;
   HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.test.com/abcde");
   request.AllowAutoRedirect = true;
   setupParameters = result;
   ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
   ASCIIEncoding encoding = new ASCIIEncoding();
   var postData = setupParameters;
   request.Method = "POST";
   request.ContentType = "application/json";
   byte[] data = encoding.GetBytes(postData);
   //request.ContentLength = data.Length;
   using (StreamWriter postStream = new StreamWriter(request.GetRequestStream()))//error if uncomment contentlength
   {
      postStream.Write(postData);
      postStream.Flush();
      postStream.Close();
   }
   HttpWebResponse wr = (HttpWebResponse)request.GetResponse();//error occurs
   Stream receiveStream = wr.GetResponseStream();
   StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
}
catch (WebException ex)
{
   if (ex.Response != null)
   {
      using (var errorResponse = (HttpWebResponse)ex.Response)
      {
        using (var reader = new StreamReader(errorResponse.GetResponseStream()))
        {
           string error = reader.ReadToEnd();
           result = error;
        }
    }
}

我建议修改您的请求以遵循此格式。特别要注意请求。方法和要求。内容类型,多次让我出局。此外,以这种方式处理响应更容易。

try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(YOURURL);
                request.ContentType = "application/json; charset=utf8";
                request.Headers.Add(ADD HEADER HERE IF YOU NEED ONE);
                request.Method = WebRequestMethods.Http.Post; // IMPORTANT
                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                     streamWriter.Write(JsonConvert.SerializeObject(JSONBODYSTRING)); 
// I USUALLY YOU JSONCONVERT HERE TO SIMPLY SERIALIZE A STRING CONTAINING THE JSON INFO. 
//BUT I GUESS YOUR METHOD WOULD ALSO WORK
                    streamWriter.Flush();
                    streamWriter.Close();
                }
                WebResponse response = request.GetResponse();
                using (var streamReader = new StreamReader(response.GetResponseStream()))
                {
                    string result = streamReader.ReadToEnd();
                    // DO WHATEVER YOU'D LIKE HERE
                }
            } catch (Exception ex)
            {
               // HANDLE YOUR EXCEPTIONS
            }

最新更新