C# 将字符串和字节数组发布到服务器

C# 将字符串和字节数组发布到服务器,c#,windows-phone-7,windows-phone-8,httpwebrequest,C#,Windows Phone 7,Windows Phone 8,Httpwebrequest,我已经使用字符串post数据完成了从服务器发布和获取,但现在我有了下一个Web服务: 提交反馈(字符串标记、字符串主题、字符串正文、字节[]照片、字节[]视频) 看看post数据-它是一个字符串,我无法将imageBytes数组放在那里。怎么做?使用HttpWebRequest有什么理由吗 我这样问是因为我认为向服务发送文件的正确方式是通过多部分数据。使用HttpWebRequest,您必须手动实现该功能 下面是一个使用Microsoft HttpClient的示例,它可能适合您: public

我已经使用字符串post数据完成了从服务器发布和获取,但现在我有了下一个Web服务:

提交反馈(字符串标记、字符串主题、字符串正文、字节[]照片、字节[]视频)


看看post数据-它是一个字符串,我无法将imageBytes数组放在那里。怎么做?

使用HttpWebRequest有什么理由吗

我这样问是因为我认为向服务发送文件的正确方式是通过多部分数据。使用HttpWebRequest,您必须手动实现该功能

下面是一个使用Microsoft HttpClient的示例,它可能适合您:

public async Task<string> submitFeedback(String token, String subject, String body, byte[] photo, byte[] video) {
    var client = new HttpClient();
    var content = new MultipartFormDataContent(); 

    // Some APIs do not support quotes in boundary field
    foreach (var param in content.Headers.ContentType.Parameters.Where(param => param.Name.Equals("boundary")))
        param.Value = param.Value.Replace("\"", String.Empty);

    var tok = new StringContent(token);
    content.Add(tok, "\"token\"");
    var sub = new StringContent(subject);
    content.Add(tok, "\"subject\"");

    // Add the Photo 
    var photoContent = new StreamContent(new MemoryStream(photo));
    photoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"photo\"",
        FileName = "\"photoname.jpg\""
    };
    photoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
    content.Add(photoContent);

    // Add the video
    var videoContent = new StreamContent(new MemoryStream(video));
    videoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"video\"",
        FileName = "\"videoname.jpg\""
    };
    videoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("video/mp4");
    content.Add(videoContent);

    HttpResponseMessage resp;

    try {           
        resp = await client.PostAsync("SERVER_URL_GOES_HERE", content);
    }
    catch (Exception e)
    {
        return "EXCEPTION ERROR";
    }

    if (resp.StatusCode != HttpStatusCode.OK)
    {
        return resp.StatusCode.ToString();
    }

    var reponse = await resp.Content.ReadAsStringAsync();

    return reponse;
}
公共异步任务提交反馈(字符串标记、字符串主题、字符串正文、字节[]照片、字节[]视频){
var client=新的HttpClient();
var content=新的MultipartFormDataContent();
//某些API不支持边界字段中的引号
foreach(content.Headers.ContentType.Parameters.Where(param=>param.Name.Equals(“boundary”))中的var param)
param.Value=param.Value.Replace(“\”,String.Empty);
var tok=新的字符串内容(令牌);
添加(tok,“\”令牌“);
var sub=新内容(主题);
添加(tok,“\”主题“);
//添加照片
var photoContent=新的流内容(新的内存流(照片));
photoContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
Name=“\”photo\”,
FileName=“\”photoname.jpg“”
};
photoContent.Headers.ContentType=MediaTypeHeaderValue.Parse(“图像/jpeg”);
内容。添加(光内容);
//添加视频
var videoContent=新的流内容(新的内存流(视频));
videoContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
Name=“\”video\”,
FileName=“\”videoname.jpg“”
};
videoContent.Headers.ContentType=MediaTypeHeaderValue.Parse(“视频/mp4”);
内容。添加(视频内容);
httpresponsemessageresp;
试试{
resp=wait client.PostAsync(“服务器URL到这里”,内容);
}
捕获(例外e)
{
返回“异常错误”;
}
if(resp.StatusCode!=HttpStatusCode.OK)
{
返回resp.StatusCode.ToString();
}
var response=wait resp.Content.ReadAsStringAsync();
返回响应;
}
相应地改变。 注意:HttpClient也在幕后使用HttpWebRequest。
此外,我认为让UI线程发出请求不是一个好主意。这没有任何意义,因为您正在阻塞接口,使异步理论变得无用。

您是否尝试将字节[]转换为字符串?
public async Task<string> submitFeedback(String token, String subject, String body, byte[] photo, byte[] video) {
    var client = new HttpClient();
    var content = new MultipartFormDataContent(); 

    // Some APIs do not support quotes in boundary field
    foreach (var param in content.Headers.ContentType.Parameters.Where(param => param.Name.Equals("boundary")))
        param.Value = param.Value.Replace("\"", String.Empty);

    var tok = new StringContent(token);
    content.Add(tok, "\"token\"");
    var sub = new StringContent(subject);
    content.Add(tok, "\"subject\"");

    // Add the Photo 
    var photoContent = new StreamContent(new MemoryStream(photo));
    photoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"photo\"",
        FileName = "\"photoname.jpg\""
    };
    photoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
    content.Add(photoContent);

    // Add the video
    var videoContent = new StreamContent(new MemoryStream(video));
    videoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"video\"",
        FileName = "\"videoname.jpg\""
    };
    videoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("video/mp4");
    content.Add(videoContent);

    HttpResponseMessage resp;

    try {           
        resp = await client.PostAsync("SERVER_URL_GOES_HERE", content);
    }
    catch (Exception e)
    {
        return "EXCEPTION ERROR";
    }

    if (resp.StatusCode != HttpStatusCode.OK)
    {
        return resp.StatusCode.ToString();
    }

    var reponse = await resp.Content.ReadAsStringAsync();

    return reponse;
}