从WebClient.Download中检索内容

时间:2014-08-04 13:34:15

标签: c# asp.net-mvc-3 webclient

我使用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();
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

使用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();

答案 1 :(得分:1)

首先在:

int length = Convert.ToInt32(requestData.Length)

我认为您会发现requestData.Length已经是int:转换它只会让代码混乱。

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

使用

content = Encoding.UTF8.GetString(strArray)

将UTF-8数据解码为.NET字符串。 (注意,如果内容很长,有很多方法可以逐步执行此操作,但对于不值得付出努力的简短内容。)

另请注意L.B对Q的评论:您也可以使用StreamReader(但我会明确说明编码。)