阅读实际响应而不是此代码的定义
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;
}
}
我正在调用 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;
}
}