如何在c#wp8.1(winrt)中实现多部分post请求

如何在c#wp8.1(winrt)中实现多部分post请求,c#,windows-phone-8,windows-runtime,windows-phone-8.1,winrt-xaml,C#,Windows Phone 8,Windows Runtime,Windows Phone 8.1,Winrt Xaml,已经是第二天尝试实现一个多部分post请求,但到目前为止我失败了 任务:向服务器发送1或2张图片 请告诉我如何在Windows Phone 8.1(WinRT)中执行此操作。已经在互联网上尝试了大量链接,但什么也没发生 p、 在API服务器的描述中,您必须以以下格式提交请求 { "type": "object", "properties": { "files": { "type": "array", "items": { "type"

已经是第二天尝试实现一个多部分post请求,但到目前为止我失败了

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

请告诉我如何在Windows Phone 8.1(WinRT)中执行此操作。已经在互联网上尝试了大量链接,但什么也没发生

p、 在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;
}
public异步静态任务上载文件(StorageFile)
{
var streamData=await file.OpenReadAsync();
var bytes=新字节[streamData.Size];
使用(var-dataReader=newdatareader(streamData))
{
等待dataReader.LoadAsync((uint)streamData.Size);
dataReader.ReadBytes(字节);
}
System.Net.Http.HttpClient-HttpClient=new System.Net.Http.HttpClient();
System.Net.Http.MultipartFormDataContent form=新系统.Net.Http.MultipartFormDataContent();
Add(新系统.Net.Http.StringContent(UserLogin),“用户名”);
Add(new System.Net.Http.StringContent(UserPassword),“password”);
Add(新系统.Net.Http.ByteArrayContent(字节,0,字节.长度),“文件”,“项”);
form.Headers.ContentType=新的MediaTypeHeaderValue(“多部分/表单数据”);
System.Net.Http.HttpResponseMessage response=等待httpClient.PostAsync(UploadFilesURI,表单);
response.EnsureSuccessStatusCode();
httpClient.Dispose();
字符串sd=response.Content.ReadAsStringAsync().Result;
返回true;
}

很抱歉使用这种风格的代码。我还没有完全弄清楚如何在帖子中正确插入它,我最终解决了我的问题。代码如下所示

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 ""; }

    }
公共异步静态任务上载文件(StorageFile[]文件)
{
尝试
{
System.Net.Http.HttpClient client=新系统.Net.Http.HttpClient();
client.DefaultRequestHeaders.AcceptLanguage.Add(新的StringWithQualityHeaderValue(“ru”);
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“Token”,“Token=“+SessionToken”);
var content=new System.Net.Http.MultipartFormDataContent();
foreach(文件中的var文件)
{
如果(文件!=null)
{
var streamData=await file.OpenReadAsync();
var bytes=新字节[streamData.Size];
使用(var-dataReader=newdatareader(streamData))
{
等待dataReader.LoadAsync((uint)streamData.Size);
dataReader.ReadBytes(字节);
}
字符串fileToUpload=file.Path;
使用(var fstream=await file.OpenReadAsync())
{
var streamContent=new System.Net.Http.ByteArrayContent(字节);
streamContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
Name=“files[]”,
FileName=Path.GetFileName(fileToUpload),
};
content.Add(streamContent);
}
}
}
var response=await client.PostAsync(新Uri(uploadFileURI,UriKind.Absolute),content);
var contentresponse=wait response.Content.ReadAsStringAsync();
var result=JsonConvert.DeserializeObject(contentResponce);
返回result.cache;
}
catch{return”“;}
}

已经在互联网上尝试了大量链接,但什么也没发生。什么都没发生意味着什么?请你把实际代码发出去,否则我们帮不了你。当然可以。我已经附上下面的代码。对不起,问题是你的JSON格式不正确?你不能得到正确的结构吗?如果我理解正确,根据你想要发送文件到服务器的API判断,在API的描述中是查询结构。因此,我得出结论,我必须插入multipart和json。可能是。这是来自API的查询(顶部)和响应(底部)的屏幕截图