【发布时间】:2018-02-21 15:03:41
【问题描述】:
在我的 oData 网络服务中,我有一个名为 Ware 的业务对象。这个Ware 有一个Image 类型的属性,称为Picture。当我想使用 HttpClient 在 UWP 应用程序中获取图片时,我只需调用 http://localhost:8797/Data/Ware(2)/Picture。代码如下:
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(DataServiceAddress + "Data/");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Clear();
using (HttpResponseMessage message = await client.GetAsync(url))
{
message.EnsureSuccessStatusCode();
var content = (StreamContent)message.Content;
return await content.ReadAsByteArrayAsync();
}
}
这按预期工作,并将图片作为数组字节返回给我。
现在我想通过“PUT”上传新的Picture。我试过下面的代码:
public static async Task PutImage(string url, byte[] image)
{
var handler = new HttpClientHandler { UseDefaultCredentials = true };
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(DataServiceAddress + "Data/");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Clear();
using (var ms = new MemoryStream(image))
{
using (var message = await client.PutAsync(url, httpContent))
{
message.EnsureSuccessStatusCode();
}
}
}
}
然后当我打电话给PutImage("Ware(2)/Picture", myFile.toByteArray()) 时,我收到了Bad Request 的回复。
有趣的是,当我使用 Postman 尝试 PUT 时,它工作正常。正如您在下图中看到的那样,我得到了 204 结果,并且我的图片已成功更改。
Screenshot: Postman is successful sending the file with a 'PUT' verb to the odata server
谁能帮帮我?
这是 Postman 生成的代码:
PUT /Data/Ware(2)/Picture HTTP/1.1
Host: localhost:8797
Authorization: Basic QWRtaW46
Cache-Control: no-cache
Postman-Token: 37827f09-8841-7ccb-c462-d488ef4c4e9d
undefined
我做了很多谷歌搜索。但没有希望。 :(
【问题讨论】:
-
您是否使用 Fiddler 进行了测试以查看从您的 UWP 应用程序生成的代码?也许这里与导致问题的 UWP 代码有一些差异。顺便问一下,你的 Httpclient API 来自哪个命名空间,system.web 还是 windows.web?
-
谢谢巴里。它是
System.Net.Http.HttpClient。我不认识提琴手。我现在就下载给你。 -
@BarryWang-MSFT 真的谢谢你。该应用程序(提琴手)帮助了我很多。我解决了这个问题。我会发布它作为答案。但现在我有另一个问题。我该怎么做才能将“图片”设置为空。 (删除图片)?
标签: c# uwp httpclient image-uploading put