如何在Silverlight中调用外部REST API

时间:2013-02-04 20:06:27

标签: silverlight rest proxy httpwebrequest silverlight-5.0

假设我不控制服务器并且无法在其中放置crossdomain.xml或clientaccesspolicy.xml文件,如何在Silverlight应用程序内部对外部REST API进行http调用,而无需使用javascript来执行然后将数据传递给Silverlight应用程序?

4 个答案:

答案 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的示例中。