在我的 asp.net-mvc 应用程序中,我需要包含一个显示旧页面的页面。此页面的主体是通过调用现有的 Perl 脚本创建的。这个 Perl 脚本是外部托管的。
有没有办法做这样的事情:
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
在我的 asp.net-mvc 应用程序中,我需要包含一个显示旧页面的页面。此页面的主体是通过调用现有的 Perl 脚本创建的。这个 Perl 脚本是外部托管的。
有没有办法做这样的事情:
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
不作为直接包含,因为ASP.NET 服务器端包含需要在服务器上编译页面。
当页面加载时,您可以使用jQuery从该 URL 下载 HTML,尽管我很欣赏这并不完美。
或者(我不知道这是否可行)您可以从 ASP.NET MVC 控制器对 perl 网页执行WebRequest,并将生成的 HTML 作为文本放入视图中。这样,如果 perl 页面不经常更改,您就可以利用输出缓存之类的东西来限制对 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;
}
(大多数代码从这里公然撕掉,因此没有检查)
您可以通过简单地使用框架并将框架源设置为需要包含的 url 以低调的方式实现这一点。这非常简单,并且可以在没有任何服务器或客户端脚本的情况下关闭,所以如果可能的话,这将是我的首选方法。
但是,如果您希望 html 看起来来自您的服务器,则需要手动包含它 - 通常通过使用WebRequest
Neil 说。不过,您可能希望缓存远程页面以提高性能,因为它是一个 perl 脚本,我假设该页面是动态的,所以这可能不是一个好主意。