繁体   English   中英

将图片上传到oData Web服务

[英]Upload a picture to oData web service

在我的oData Web服务中,我有一个名为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结果,并且我的图片已成功更改。

屏幕截图:邮递员已成功将带有“ PUT”动词的文件发送到odata服务器

有人可以帮我吗?

这是邮递员生成的代码:

    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

我做了很多谷歌搜索。 但是没有希望。 :(

终于完成了:)

   public static async Task PutImage(string url, byte[] image)
   {
        var httpContent = new ByteArrayContent(image);

        var handler = new HttpClientHandler { UseDefaultCredentials = true };
        using (var client = new HttpClient(handler))
        {
            client.BaseAddress = new Uri(DataServiceAddress + "Data/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
            client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
            client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));

            using (var request = new HttpRequestMessage(HttpMethod.Put, url) { Content = httpContent })
            {

                httpContent.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                using (var message = await client.SendAsync(request))
                {
                    message.EnsureSuccessStatusCode();
                }
            }
        }
    }

一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM