2013-02-04 73 views
0

假設我不控制服務器並且無法在其中放置crossdomain.xml或clientaccesspolicy.xml文件,那麼如何在Silverlight應用程序內將http調用傳遞給外部REST API,而不必使用JavaScript來做到這一點,然後將數據傳遞給Silverlight應用程序?如何在Silverlight中調用外部REST API

回答

0

我最終實現一個ASP.NET代理相似,有什麼描述here

,然後將以下代碼添加到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

0

您可以構建您自己的代理服務器(或者您的Web應用程序中的服務器應用程序或http處理程序)以將請求轉發到所需的主機。

0

沒有別的辦法,要麼你用的crossdomain.xmlclientaccesspolicy.xml或者你的JavaScript將數據傳遞給應用程序解決此問題。

0

如上所述,代理服務器是唯一的答案,因爲微軟從頭建立的限制。我一直在使用Silverlight多年,希望他們從來沒有這樣做過。

但是,我創造了這個庫:

它有一個通的實現通過(代理)REST的服務與Silverlight的樣本,這使它看起來好像在Silverlight客戶端應用程序一起交談到位桶正在與BitBucket直接交談。我已經將代碼包含在爲您提供clientaccesspolicy的示例中。