我正在尝试将 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 CODE 和 END ORIGINAL CODE 注释之间,有我无法迁移的代码,以便您了解它的作用,我可能需要让它在 WP 上运行。
其他代码已经在 WP 上运行,除了
request.Content.Headers.Add("ContentType", "multipart/form-data; boundary=" + Boundary);
因为,由于某些原因,request.Content
为 null。
所以我的问题是:如何使用 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/