0

假设我不控制服务器并且不能将 crossdomain.xml 或 clientaccesspolicy.xml 文件放在那里,我怎样才能在 Silverlight 应用程序内对外部 REST API 进行 http 调用,而不必使用 javascript 来执行它然后将数据传递给 Silverlight 应用程序?

4

4 回答 4

0

您可以构建自己的代理服务器(或服务器应用程序,或 Web 应用程序中的 http 处理程序)以将请求转发到所需的主机。

于 2013-02-05T04:46:20.267 回答
0

没有其他办法,要么使用crossdomain.xmlclientaccesspolicy.xml ,要么使用javascript将数据传递给应用程序来解决这个问题。

于 2013-02-05T10:51:28.370 回答
0

我最终实现了一个类似于这里描述的 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

于 2013-02-13T16:50:27.927 回答
0

如上所述,由于微软从头开始构建的限制,代理服务器是唯一的答案。我与 Silverlight 合作多年,希望他们从未这样做过。

但是,我创建了这个库: https ://bitbucket.org/MelbourneDeveloper/restclient-.net

它有一个传递(代理)REST 服务的实现,该服务与 BitBucket 以及 Silverlight 示例进行对话,这使得 Silverlight 中的客户端应用程序看起来好像直接与 BitBucket 对话。我在示例中包含了为您提供客户端访问策略的代码。

于 2016-08-14T08:43:49.643 回答