天天看點

使用XPathDocument拒絕通路網站外部資源時的兩種替代方法

XPathDocument對象提供了一種非常友善的加載XML資源的方法,隻要被通路的資源路徑正确并且目前程序有權限進行通路,則可以直接通過該對象的構造函數加載XML檔案,然後以面向對象的方式對XML檔案進行操作。如果要通路的XML檔案拒絕目前程序以匿名身份進行通路,我們可以通過設定XML檔案的通路級别或者賦予程式以更高的安全級别運作來解決這個問題。但是如果要通路的XML檔案是外部資源并且我們無權修改通路安全級别,則下面兩種方法可以用來嘗試。

<a href="http://images.cnblogs.com/cnblogs_com/jaxu/201104/20110429001831961.png"></a>

方法一:嘗試使用資源實體路徑進行通路

  下面的代碼通過Server.MapPath方法将資源的URL轉換為伺服器上的實體路徑,然後使用XPathDocument對象的構造函數進行加載。

1 string url = "http://www.example.com/resource/demo.xml";

2 string sAbsolutePath = HttpContext.Current.Server.MapPath(Server.UrlDecode(url));

3 XPathDocument oXPathDocument = new XPathDocument(sAbsolutePath);

   注意URL中可能包含經過轉義後的字元,是以需要通過Server.UrlDecode方法進行decode操作。

方法二:嘗試以特定使用者的身份通路資源

  下面的代碼示範了以目前系統使用者身份通路XML資源。

<a></a>

3 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));

4 request.Credentials = CredentialCache.DefaultNetworkCredentials;

6 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

7 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

8 XPathDocument oXPathDocument = new XPathDocument(sr);

  當然你也可以以特定的使用者進行通路,如:

request.Credentials = new NetworkCredential("userName", "password", "domain");

  這樣便可以提高目前程式通路XML外部資源的權限。

  

本文轉自Jaxu部落格園部落格,原文連結:http://www.cnblogs.com/jaxu/archive/2011/04/29/2032335.html,如需轉載請自行聯系原作者