【问题标题】:How to implement a multipart post request in c# wp8.1 (winrt)如何在 c# wp8.1 (winrt) 中实现多部分发布请求
【发布时间】:2015-09-08 06:26:36
【问题描述】:

已经在第二天尝试实现多部分发布请求,但到目前为止我失败了。

任务:向服务器发送 1 或 2 张图片。

请告诉我如何在 Windows Phone 8.1 (WinRT) 中执行此操作。已经在互联网上尝试了大量的链接,但没有任何反应。

附言在API服务器的描述中写到必须按照以下格式提交请求。

   {
  "type": "object",
  "properties": {
    "files": {
      "type": "array",
      "items": {
        "type": "file"
      }
    }
  }
}

是的,当然。这是我的代码。我搜索了互联网并最终尝试实现这一点。有趣的是,它工作并将数据发送到服务器。只有北返回错误:“数据错误”,所以我以错误的格式发送出去。我认为这是因为不是 json 创建的结构,我在上面写过。

public async static Task<bool> UploadFiles(StorageFile file)
{
    var streamData = await file.OpenReadAsync();
    var bytes = new byte[streamData.Size];
    using (var dataReader = new DataReader(streamData))
    {
        await dataReader.LoadAsync((uint)streamData.Size);
        dataReader.ReadBytes(bytes);
    }
    System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
    System.Net.Http.MultipartFormDataContent form = new System.Net.Http.MultipartFormDataContent();
    form.Add(new System.Net.Http.StringContent(UserLogin), "username");
    form.Add(new System.Net.Http.StringContent(UserPassword), "password");
    form.Add(new System.Net.Http.ByteArrayContent(bytes, 0, bytes.Length), "files", "items");
    form.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
    System.Net.Http.HttpResponseMessage response = await httpClient.PostAsync(UploadFilesURI, form);
    response.EnsureSuccessStatusCode();
    httpClient.Dispose();
    string sd = response.Content.ReadAsStringAsync().Result;
   return true;
}

很抱歉这种风格的代码。还没有完全弄清楚如何在帖子中正确插入它

【问题讨论】:

  • 已经在互联网上尝试了大量的链接,但是什么都没有发生。什么都没有发生是什么意思?能否请您发布实际代码,否则我们将无法提供帮助。
  • 是的,当然。我附上了下面的代码。对不起
  • 所以问题是你的 JSON 格式不正确?你找不到合适的结构吗?
  • 如果我理解正确的话,通过API判断你想要将文件发送到服务器并且在API的描述中是查询结构。因此,我得出结论,我必须插入 multipart 和 json。可能是。
  • 这是来自 API 1drv.ms/1KBkitP的查询(顶部)和响应(底部)的屏幕截图

标签: c# windows-phone-8 windows-runtime windows-phone-8.1 winrt-xaml


【解决方案1】:

我最终解决了我的问题。下面给出的代码

public async static Task<string> UploadFiles(StorageFile[] files)
    {
        try
        {
            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("ru"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "token=" + SessionToken);
            var content = new System.Net.Http.MultipartFormDataContent();
            foreach (var file in files)
            {
                if (file != null)
                {
                    var streamData = await file.OpenReadAsync();
                    var bytes = new byte[streamData.Size];
                    using (var dataReader = new DataReader(streamData))
                    {
                        await dataReader.LoadAsync((uint)streamData.Size);
                        dataReader.ReadBytes(bytes);
                    }
                    string fileToUpload = file.Path;
                    using (var fstream = await file.OpenReadAsync())
                    {
                        var streamContent = new System.Net.Http.ByteArrayContent(bytes);
                        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                        {
                            Name = "files[]",
                            FileName = Path.GetFileName(fileToUpload),

                        };
                        content.Add(streamContent);
                    }
                }
            }
            var response = await client.PostAsync(new Uri(UploadFilesURI, UriKind.Absolute), content);
            var contentResponce = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<API.ResponceUploadFiles.RootObject>(contentResponce);
            return result.cache;
        }
        catch { return ""; }

    }

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多