c# - 将 C# 库迁移到 Windows Phone

标签 c# file-upload windows-phone-8 httprequest dotnet-httpclient

我正在尝试将 Windows C# 库迁移到 Windows Phone 8,但我不得不对库从在线 URI 获取数据的方式进行一些更改。

我正在使用 BCL 的 HttpClient 来执行我的数据检索,目前一切正常。

该库还需要一个上传功能,我找不到使用 HttpClient 执行此操作的方法。

代码如下:

// Client setup
var httpclient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, string.Format(SubmitURI, value));
// Add the headers    
request.Headers.Add("header", header);
var postData = GetPostData();
var data = Encoding.UTF8.GetBytes(postData);
// Side question -> Content is null here!
request.Content.Headers.Add("ContentType", "multipart/form-data; boundary=" + Boundary);
// BEGIN ORIGINAL CODE
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
// END ORIGINAL CODE
// Get response
var response = await httpclient.SendAsync(request);
var responseContent = new StreamReader(await response.Content.ReadAsStreamAsync()).ReadToEnd();

BEGIN ORIGINAL CODEEND ORIGINAL CODE 注释之间,有我无法迁移的代码,以便您了解它的作用,我可能需要让它在 WP 上运行。

其他代码已经在 WP 上运行,除了

request.Content.Headers.Add("ContentType", "multipart/form-data; boundary=" + Boundary);

因为,由于某些原因,request.Contentnull

所以我的问题是:如何使用 HttpClient(或任何更好的方法)将这 3 行迁移到 WP?

还有,作为一个小问题,为什么 request.Content 为空?

编辑:根据@Johan van der Slikke 的回答,我编辑了我的代码。可以编译,但是服务器报告没有文件上传,所以我猜还是有一些问题。

var stream = new MemoryStream(data);
var streamContent = new StreamContent(stream);
request.Content = streamContent;
request.Content.Headers.Add("ContentType", "multipart/form-data; boundary=" + Boundary);
// Get response
var response = await httpclient.SendAsync(request);

最佳答案

您应该将流包装在 StreamContent 类(HttpContent 的子类)中,并使用 使用 HttpClient 发送它PostAsyncPutAsync 方法。

编辑

您不需要使用HttpRequestMessage

var stream = new MemoryStream(data);
var streamContent = new StreamContent(stream);
// Get response
var response = await httpclient.PostAsync(streamContent)

此外,您不需要使用字节数组创建 MemoryStream。您可以直接将其包装在 ByteArrayContent 中。

var response = await httpclient.PostAsync(new ByteArrayContent(data))

也许(因为我看到您使用 multipart/form-data header )您应该使用 MultipartFormDataContent 类或 FormUrlEncodedContentClasses

关于c# - 将 C# 库迁移到 Windows Phone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354204/

相关文章:

ruby-on-rails - rails : Testing file upload validation (Shrine gem) at model spec

c# - Windows Phone 8 文本框接受返回作为提交按钮

c# - 各种列表初始化和填充技术的性能差异

c# - 绑定(bind)不适用于自定义用户控件的依赖属性

javascript - Angular 未定义的多个文件上传

php - 通过 PHP 或 Apache 从服务器端上传 HTTP 文件

windows-phone-8 - wp8 应用栏中的文本换行

c# - 在 Windows Phone 8 App 中播放音效

c# - 在 C# Redis : could not connect to redis Instance at 127. 0.0.1:6379

c# - 您在数据应用程序中使用枚举吗?如何使用?