在我的asp.net-mvc應用程序中,我需要包含一個顯示遺留頁面的頁面。 通過調用現有的Perl腳本創建此頁面的主體。 這個Perl腳本是外部託管的。服務器端包含外部HTML?
有沒有辦法做這樣的事情:
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
在我的asp.net-mvc應用程序中,我需要包含一個顯示遺留頁面的頁面。 通過調用現有的Perl腳本創建此頁面的主體。 這個Perl腳本是外部託管的。服務器端包含外部HTML?
有沒有辦法做這樣的事情:
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
還不如直接包括,因爲ASP.NET server-side-includes需要的頁面,以在服務器上編譯。
當頁面加載時,您可以使用jQuery從該URL下載HTML,不過我明白這並不完美。
另外(我不知道這是否會起作用),你可以從你的ASP.NET MVC控制器執行一個WebRequest到perl網頁,並把得到的HTML作爲文本放到視圖中。這樣你可以利用諸如output caching之類的東西來限制perl頁面的點擊次數,如果它不經常改變的話。
您可以通過簡單地使用框架並將框架源設置爲需要包含的url來以低調的方式實現這一點。這很簡單,可以在沒有任何服務器或客戶端腳本的情況下關閉,所以如果可能的話,這將是我的首選方法。
但是,如果您希望html看似來自您的服務器,那麼您需要手動包含它 - 通常使用WebRequest
,正如Neil所說。不過,您可能希望緩存遠程頁面的性能,因爲它是一個perl腳本,我假設該頁面是動態的,所以這可能不是一個好主意。
如果您想一次完成所有工作,您可以從服務器執行HTTP請求並將內容寫入頁面?
事情是這樣的:
Response.Write(GetHtmlPage("http://www.example.com/theScript.plx"));
調用此方法:
public String GetHtmlPage(string strURL)
{
// the html retrieved from the page
String strResult;
WebResponse objResponse;
WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL);
objResponse = objRequest.GetResponse();
// the using keyword will automatically dispose the object
// once complete
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
strResult = sr.ReadToEnd();
// Close and clean up the StreamReader
sr.Close();
}
return strResult;
}
(大多數代碼從here公然撕裂,因此不選中)
我採取了類似的做法在第一。我的控制器將獲得HTML並通過TempData傳遞它。然而,從plx返回的結果是整個頁面(包括頭部,主體等)以及相關鏈接。無論如何,它必須進入一個框架。 – 2009-10-01 07:40:52
啊,我明白你的意思了,鮑里斯。一個框架可能是要走的路,除非你想走下去剝離你不需要的html的路徑 - 我不會推薦:) – Damovisa 2009-10-05 00:19:32
或者,你可以先清除響應,然後寫出頁面,但是你只會發送來自其他服務器的響應。如果有標準的佈局,菜單或任何其他需要發送的html,則會丟失它。 – Damovisa 2009-10-05 00:20:49