根据Windows 10 IoT REST接口的文档,可以通过REST API部署应用程序。


  / api / appx / packagemanager / package
  
  上传并安装.appx文件。
  
  HTTP动词:POST
  
  参量
  
  package:要安装的软件包的文件名。
  
  有效载荷
  
  多部分符合http正文


如何正确组装有效载荷?我想部署一个本地.appx包,我这样尝试过:

        Windows.Storage.StorageFolder storageFolder =
        Windows.Storage.ApplicationData.Current.LocalFolder;

        byte[] filecontent = null;
        string p = storageFolder.Path;
        filecontent = File.ReadAllBytes(p + "\\TestAppDeploy_1.0.1.0_ARM.appx");


        //URL + parameter Base64 encoding
        string filenameb64 = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("TestAppDeploy_1.0.1.0_ARM.appx"));
        string url = "http://localhost:8080/api/appx/packagemanager/package?package="+filenameb64;

        HttpClient client = new HttpClient();

        //authentication
        var byteArray = Encoding.ASCII.GetBytes("Administrator:password");
        client.DefaultRequestHeaders.Authorization = new  System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

        var multipart = new MultipartContent();
        ByteArrayContent byteArrayContent = new ByteArrayContent(filecontent);

        multipart.Add(byteArrayContent);

            HttpResponseMessage response = await client.PostAsync(url, multipart);

            string res = await response.Content.ReadAsStringAsync();
            var status = response.StatusCode;

            client.Dispose();

            Debug.WriteLine(res + "    " + status);


该代码在Windows 10 IoT设备上运行。

岗位行动

         HttpResponseMessage response = await client.PostAsync(url, multipart);


给我以下回应

         {"Reason" : "Missing appx file name query parameter"}    BadRequest


我猜PostAsync调用的内容必须是具有其他参数/​​信息的MultipartContent类型。任何想法如何解决这个问题?

最佳答案

浏览器(Chrome,IE)F12模式-开发人员工具/网络-使用浏览器(minwinpc:8080)上传appx文件。查看POST的样子。 (标题,响应等。)

08-04 18:00