Silverlight,PostAsync不返回任何响应

本文关键字:任何 响应 返回 PostAsync Silverlight | 更新日期: 2023-09-27 17:58:43

我一直在尝试使用POST将图像上传到我的网站,图像被转换为base64进行传输。

不幸的是,我在Siverlight应用程序中偶然发现了一个错误。我已经成功地获得了图像的base64字符串,现在我想上传它,这是我用来执行POST请求的代码:

HttpClient hc = new HttpClient();
HttpResponseMessage response = hc.PostAsync("http://mywebsite.com/service.php", new StringContent("image=" + base64)).Result;
if (response.IsSuccessStatusCode)
{
    MessageBox.Show("Uploaded.");
}

当第二行运行时,什么也没发生,它只是完全停顿,从不跳到第三行。

由于它是Async,我认为我应该预先编写await,将行更改为:

var response = await hc.PostAsync("http://mywebsite.com/kurv.php", new StringContent("image=" + base64));

它给了我一个错误:

无法等待"系统"。线程。任务。任务系统。网Http。HttpResponseMessage>'

我也检查过silverlight,它说silverlight不能访问不允许访问的网站,所以我在我的网站根目录中添加了两个文件(http://mywebsite.com/):clientaccesspolicy.xml和crossdomain.xml。

clientaccesspolicy.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

我的crossdomain.xml看起来像这样:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

当然,这是不安全的,但我现在使用它只是为了测试,并让我的silverlight应用程序正常工作。

Silverlight,PostAsync不返回任何响应

不要使用等待,使用。ContinueWith,类似下面的内容。Silverlight在阻止操作方面表现不佳。

HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost/myproject/");
        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
        var t = client.GetAsync("api/values");
        t.ContinueWith(p =>
        {
            if (p.Result.IsSuccessStatusCode)
            {
                var users = p.Result.Content.ReadAsByteArrayAsync().Result;
                if (users != null)
                {
                }
            }
        });