C# 中的 403 响应主体的方法似乎不可用
Method seems unavailable for 403 response body in C#
这是我的网络请求代码块,
向下滚动到它的底部以捕获异常
try
{
var webRequest = System.Net.WebRequest.Create (WEBSERVICE_URL);
if (webRequest != null) {
webRequest.Method = "POST";
//webRequest.Timeout = 12000;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Headers.Add ("Key", _apiKey);
webRequest.Headers.Add ("Sign", genHMAC ());
byte[] dataStream = Encoding.UTF8.GetBytes("command=returnBalances&nonce=" + nonce);
webRequest.ContentLength = dataStream.Length;
Stream newStream = webRequest.GetRequestStream();
newStream.Write(dataStream, 0, dataStream.Length);
newStream.Close();
using (System.IO.Stream s = webRequest.GetResponse ().GetResponseStream ()) {
using (System.IO.StreamReader sr = new System.IO.StreamReader (s)) {
var jsonResponse = sr.ReadToEnd ();
OutputText.text = jsonResponse.ToString ();
}
}
}
}
catch (Exception ex)
{
OutputText.text = ex.ToString ();
}
这给了我一个 "error(403) Forbidden" 和异常堆栈跟踪,但我正在尝试获取 403 响应正文:
我无法让 Unity C# 接受以下代码:提到 here
catch(WebException ex)
{
var response = (HttpWebResponse)ex.Response;
}
我需要什么才能让这个方法起作用?我需要响应正文
hmac.ToString()
不会生成有效符号。要为 Poloniex 生成有效符号,您必须使用 HMACSHA512.ComputeHash 方法并将其作为参数传递给 dataStream
。从此方法返回的字节必须转换为十六进制字符串。
这应该生成有效符号:
var hmac = new HMACSHA512(APISecret_Bytes);
var signBytes = hmac.ComputeHash(dataStream);
var sign = String.Join("", signBytes.Select(b => b.ToString("X2")));
关于 WebException,它是在 System.Net
命名空间中声明的,因此请确保您有 using System.Net;
。根据目标框架,WebException 应该在 System.Net.Requests.dll
、System.dll
或 netstandard.dll
中。不幸的是,我没有任何使用 Unity 的经验,但如果我猜测它针对普通 .NET Framework
是正确的,那么 WebException 在 System.dll
中声明并且您的项目应该已经引用它并且没有额外的程序集应该需要参考。
这是我的网络请求代码块,
向下滚动到它的底部以捕获异常
try
{
var webRequest = System.Net.WebRequest.Create (WEBSERVICE_URL);
if (webRequest != null) {
webRequest.Method = "POST";
//webRequest.Timeout = 12000;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Headers.Add ("Key", _apiKey);
webRequest.Headers.Add ("Sign", genHMAC ());
byte[] dataStream = Encoding.UTF8.GetBytes("command=returnBalances&nonce=" + nonce);
webRequest.ContentLength = dataStream.Length;
Stream newStream = webRequest.GetRequestStream();
newStream.Write(dataStream, 0, dataStream.Length);
newStream.Close();
using (System.IO.Stream s = webRequest.GetResponse ().GetResponseStream ()) {
using (System.IO.StreamReader sr = new System.IO.StreamReader (s)) {
var jsonResponse = sr.ReadToEnd ();
OutputText.text = jsonResponse.ToString ();
}
}
}
}
catch (Exception ex)
{
OutputText.text = ex.ToString ();
}
这给了我一个 "error(403) Forbidden" 和异常堆栈跟踪,但我正在尝试获取 403 响应正文:
我无法让 Unity C# 接受以下代码:提到 here
catch(WebException ex)
{
var response = (HttpWebResponse)ex.Response;
}
我需要什么才能让这个方法起作用?我需要响应正文
hmac.ToString()
不会生成有效符号。要为 Poloniex 生成有效符号,您必须使用 HMACSHA512.ComputeHash 方法并将其作为参数传递给 dataStream
。从此方法返回的字节必须转换为十六进制字符串。
这应该生成有效符号:
var hmac = new HMACSHA512(APISecret_Bytes);
var signBytes = hmac.ComputeHash(dataStream);
var sign = String.Join("", signBytes.Select(b => b.ToString("X2")));
关于 WebException,它是在 System.Net
命名空间中声明的,因此请确保您有 using System.Net;
。根据目标框架,WebException 应该在 System.Net.Requests.dll
、System.dll
或 netstandard.dll
中。不幸的是,我没有任何使用 Unity 的经验,但如果我猜测它针对普通 .NET Framework
是正确的,那么 WebException 在 System.dll
中声明并且您的项目应该已经引用它并且没有额外的程序集应该需要参考。