代码之家  ›  专栏  ›  技术社区  ›  Mohsen

将图片上载到oData web服务

  •  0
  • Mohsen  · 技术社区  · 6 年前

    在我的ODataWebService中,有一个名为 Ware . 这 器皿 具有类型的属性 Image 打电话 Picture . 当我想在UWP应用程序中使用 HttpClient 我只是打电话 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”。我试过下面的代码:

        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 回答 有趣的是当我尝试 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
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mohsen    6 年前

    终于完成了:)

       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();
                    }
                }
            }
        }
    

    它工作得很好。