阅读实际响应而不是此代码的定义

read actual response rather than the definition of this code

我正在调用 API,在出现任何错误后,他们会向我们提供如下错误

HTTP response status : 406
{
  "status": 1,
  "errors": [
   { 
      "errorKey": "10011", 
      "errorMessage": "Outdated status received", 
      "errorField": "status"
    }
   ]
}

但是当我试图读取我得到的值时 The remote server returned an error: (406) Not Acceptable。下面是我试图从响应中读取值的代码。

            string responseStr = "";
            HttpStatusCode statusCode;
            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes(stringOrder);
            request.Headers.Add("clientId", clientId.Trim());
            request.Headers.Add("SecurityToken", BigApiKey.Trim());
            request.ContentType = "application/json";
            request.ContentLength = bytes.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
            HttpWebResponse response;
            response = (HttpWebResponse)request.GetResponse();
            statusCode = response.StatusCode;


            try
            {
                Stream sw = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                {
                    sw = new GZipStream(sw, CompressionMode.Decompress);
                }
                StreamReader reader = new StreamReader(sw, Encoding.Default);
                responseStr = reader.ReadToEnd();
                reader.Close();
            }
            catch (Exception ex)
            {
            errLog.LogsWrite(new Exception("  Error   " ));
                errLog.LogsWrite(ex);
            }
            return responseStr;

但是当服务器 return 低于响应时它就可以正常工作

 {
  "status": 1,
  "errors": [
    {
      "errorKey": "1000",
      "errorMessage": "Invalid delivery status received!",
      "errorField": ""
    }
  ]
}

你能告诉我我在代码中做错了什么吗?

我假设 header 中的服务器 returns HTTP 错误代码 406,因此 request.GetResponse() 抛出 WebException 并且执行未到达 response.GetResponseStream(); 观点。您需要将代码包装到 try {...} catch (WebException) ... 块中:

try
{
    // Your entire code snippet here
}
catch (WebException ex)
{
    if (ex.Response != null)
    {
        string errorResponse;
        var httpWebResponse = ((HttpWebResponse)exception.Response);
        using (var reader = new StreamReader(httpWebResponse.GetResponseStream()))
            errorResponse = reader.ReadToEnd();
        return errorResponse;
    }
}