假设我不控制服务器并且无法在其中放置crossdomain.xml或clientaccesspolicy.xml文件,如何在Silverlight应用程序内部对外部REST API进行http调用,而无需使用javascript来执行然后将数据传递给Silverlight应用程序?
答案 0 :(得分:0)
您可以构建自己的代理服务器(或Web应用程序中的服务器应用程序或http处理程序),以将请求转发到所需的主机。
答案 1 :(得分:0)
没有其他办法,您可以使用 crossdomain.xml 和 clientaccesspolicy.xml ,也可以使用 javascript 将数据传递给应用
答案 2 :(得分:0)
我最终实现了一个类似于here
所描述的ASP.NET代理然后将以下代码添加到Silverlight应用程序:
public class Handler : IWebRequestCreate
{
public WebRequest Create(Uri uri)
{
return WebRequestCreator.ClientHttp.Create(new Uri("http://localhost:3234/Proxy.ashx?" + Uri.EscapeUriString(uri.OriginalString)));
}
}
public MainPage()
{
InitializeComponent();
HttpWebRequest.RegisterPrefix("http://", new Handler());
HttpWebRequest.RegisterPrefix("https://", new Handler());
(...rest of code...)
}
有一点需要注意的是,对于代码的其余部分,必须小心谨慎,始终使用HttpWebRequest.Create
而不是HttpWebRequest.CreateHttp
答案 3 :(得分:0)
如上所述,代理服务器是唯一的答案,因为微软从头开始构建了限制。我已经和Silverlight合作多年了,并希望他们从未这样做过。
但是,我创建了这个库: https://bitbucket.org/MelbourneDeveloper/restclient-.net
它具有传递(代理)REST服务的实现,该服务与BitBucket以及Silverlight示例进行通信,使其看起来好像Silverlight中的客户端应用程序直接与BitBucket通信。我已将代码包含在为您提供clientaccesspolicy的示例中。