【问题标题】:How to get multipart request data in aspx?如何在aspx中获取多部分请求数据?
【发布时间】:2015-02-05 20:31:48
【问题描述】:

我正在尝试将 HttpPost 请求从 Android 发送到 C# (.net 3.5) aspx 服务器。我正在使用 Apache 多部分实体构建器在 Android 端构建实体:

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]);
    }
}

我可以在请求中获取 TextBody 部分的键和值(用户名和密码)。但没有收到 BinaryBody 密钥或数据。不知道为什么?

【问题讨论】:

  • 请将解决方案作为答案发布。
  • 我应该在stackoverflow中回答我自己的问题吗?回答我自己的问题后,我的声誉损失了 2 分...

标签: c# asp.net .net .net-3.5 multipart


【解决方案1】:

解决方案:

HttpFileCollection MyFiles = Request.Files;
// ...
for (int l = 0; l < MyFiles.Count; l++)
{
    if (MyFiles.GetKey(l) == "file")
    {
        HttpPostedFile file = MyFiles.Get("file");
        // ...
    }
}

【讨论】:

    【解决方案2】:

    您正在检查 Form 变量,您的代码在其中创建了一个在 HTTP 请求正文中发送的 blob。正文不是表单变量,它只是 HTTP 请求中位于标头之后的内容。

    HttpRequest 了解 HTTP 请求的内容并通过其属性公开各个部分,例如CookiesFilesFormHeaders

    如果您的代码将二进制数据作为文件发送,请检查Files 属性。否则,您可以使用 InputStream 属性读取正文的内容。

    假设数据可以在 Files 中找到,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 只是一个流,因此您可以将其内容复制到缓冲区中,将其写入磁盘等

    【讨论】:

    • var files Request.Files; 是错字吗?我将其更改为var files = Request.Files; 并在我的代码中对其进行了测试,但是当我尝试从浏览器访问该页面时,我刚刚在aFile.InputStream.Read(input,0,length); 行得到Argument Out Of Range Exception。我错过了什么吗?提前致谢。
    • 长度的值是多少?有多少个文件?它们的名称和长度是多少?您尝试阅读哪一本?您可以发布 HTTP 请求的示例吗?您可以使用files[0] 获取第一个文件这一事实意味着请求包含至少一个文件。
    • 抱歉回复晚了。最后我解决了。解决方案很简单,我用解决方案更新了原始问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多