C# Silverlight,PostAsync未返回任何响应
我一直在尝试使用POST将图像上传到我的站点,图像被转换为base64以传输它 不幸的是,我在Siverlight应用程序中偶然发现了一个错误。我已成功获取图像的base64字符串,现在我想上传它,这是我用于执行POST请求的代码:C# Silverlight,PostAsync未返回任何响应,c#,silverlight,post,csrf,dotnet-httpclient,C#,Silverlight,Post,Csrf,Dotnet Httpclient,我一直在尝试使用POST将图像上传到我的站点,图像被转换为base64以传输它 不幸的是,我在Siverlight应用程序中偶然发现了一个错误。我已成功获取图像的base64字符串,现在我想上传它,这是我用于执行POST请求的代码: HttpClient hc = new HttpClient(); HttpResponseMessage response = hc.PostAsync("http://mywebsite.com/service.php", new StringContent("
HttpClient hc = new HttpClient();
HttpResponseMessage response = hc.PostAsync("http://mywebsite.com/service.php", new StringContent("image=" + base64)).Result;
if (response.IsSuccessStatusCode)
{
MessageBox.Show("Uploaded.");
}
第二行运行时不会发生任何事情,它只是完全暂停,从不跳到第三行
由于它是异步的,我想我应该预先编写wait
,将行更改为:
var response = await hc.PostAsync("http://mywebsite.com/kurv.php", new StringContent("image=" + base64));
它给了我一个错误:
无法等待“System.Threading.Tasks.Task System.Net.Http.HttpResponseMessage>”
我还检查了silverlight,它说silverlight无法访问不允许访问的站点,因此我在我的站点()的根目录中添加了两个文件: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>
<?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应用程序正常工作 不要使用wait,使用。
继续使用
,类似于下面的内容。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)
{
}
}
});
尝试添加Microsoft.Bcl.Async以启用异步。但不确定它是否在SL上工作。