我正在尝试从Android向C#(。net 3.5)aspx服务器发送HttpPost请求。我在Android端使用Apache多部分实体构建器构建实体:
entityBuilder.addTextBody("username", username);
entityBuilder.addTextBody("password", password);
entityBuilder.addBinaryBody("file", file);
尝试在C#服务器端获取数据:
protected void Page_Load(object sender, EventArgs e)
{
string[] keys = Request.Form.AllKeys; // only username and password keys received.
for (int i = 0; i < keys.Length; i++)
{
string [] tmp = Request.Form.GetValues (keys[i]);
}
}
我可以在Request(用户名和密码)中获取TextBody部分键和值。但没有收到BinaryBody密钥或数据。我不知道为什么?
答案 0 :(得分:2)
您正在检查表单变量,其中您的代码创建了一个在HTTP请求正文中发送的blob。正文不是表单变量,它只是标题后面的HTTP请求中的内容。
HttpRequest了解HTTP请求的内容,并通过其属性公开各个部分,例如Cookies,Files,Form,Headers。
如果您的代码将二进制数据作为文件发送,请检查Files属性。否则,您可以使用InputStream属性读取正文的内容。
假设数据可以在文件中找到,HttpPostedFile.InputStream的文档描述了如何阅读文件:
var files=Request.Files;
var aFile=files[0];
var length = aFile.ContentLength;
byte[] input = new byte[length];
aFile.InputStream.Read(input,0,length);
InputStream
只是一个流,因此您可以将其内容复制到缓冲区中,将其写入磁盘等
答案 1 :(得分:0)
<强>解决方案:强>
HttpFileCollection MyFiles = Request.Files;
// ...
for (int l = 0; l < MyFiles.Count; l++)
{
if (MyFiles.GetKey(l) == "file")
{
HttpPostedFile file = MyFiles.Get("file");
// ...
}
}