从WebClient.Download检索内容

本文关键字:检索 Download WebClient | 更新日期: 2023-09-27 18:16:30

我正在使用Webclient.UploadData上传内容到网站。

data ="GetCourses('all')"; //this will return all the courses in the course table.
WebClient wb= new WebClient();
try
{
   byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
   byte[] results = wb.UploadData(url, "POST", bytes);
   var returnResult = System.Text.Encoding.ASCII.GetString(results);
} 
catch (Exception ex)
{
   ex.ToString()
}

我正在尝试获取在另一边上面发送的数据。我希望看到"GetCourses('all')",但它显示null(' ')。

var requestData = Request.InputStream;
int length = Convert.ToInt32(requestData.Length);
byte[] strArr = new byte[length];
var strRead = requestData.Read(strArr, 0, length);
string content = string.Empty;
for (int i = 0; i < length; i++)
{
   content = content + strArr[i].ToString();
}

我在这里做错了什么?

从WebClient.Download检索内容

使用Stream.CopyTo:

var requestData = Request.InputStream;
string str;
using (var ms = new MemoryStream())
{
   requestData.CopyTo(ms);
   str = Encoding.UTF8.GetString(ms.ToArray);
}

或者像聪明人建议的那样,你可以使用StreamReader.ReadToEnd:

var streamReader = new StreamReader(Request.InputStream);
var outputString = streamReader.ReadToEnd();

first in:

int length = Convert.ToInt32(requestData.Length)

我想你会发现requestData.Length已经是int了:转换它只会使代码混乱。

但是你真正的问题是解码你的字节流。byte.ToString()将把byte的值视为数字,而不是字符。

使用

content = Encoding.UTF8.GetString(strArray)

将UTF-8数据解码为。net字符串。(注意,如果内容很长,有一些方法可以逐步做到这一点,但对于简短的内容,不值得付出努力。)

还请注意l.b.对Q的评论:您也可以使用StreamReader(但我会明确说明编码)