我一直在尝试使用POST上传图像到我的网站,将图像转换为base64以传输。
不幸的是,我的Silverlight应用程序出现了错误。我已经成功获得了图像的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.");
}
当第二行运行时什么也不会发生,它完全暂停,永远不会跳到第三行。
由于它是异步的,我想我应该在行首添加 await
,将该行更改为:
var response = await hc.PostAsync("http://mywebsite.com/kurv.php", new StringContent("image=" + base64));
我遇到了这个错误:
无法等待 'System.Threading.Tasks.Task System.Net.Http.HttpResponseMessage>'
我也检查了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应用程序正常运行而使用它。