C# 服务器端是否包含外部HTML?
在我的asp.net-mvc应用程序中,我需要包含一个显示遗留页面的页面。 此页面的主体是通过调用现有的Perl脚本创建的。 此Perl脚本由外部托管 有没有办法做到这一点:C# 服务器端是否包含外部HTML?,c#,.net,asp.net-mvc,server-side-includes,C#,.net,Asp.net Mvc,Server Side Includes,在我的asp.net-mvc应用程序中,我需要包含一个显示遗留页面的页面。 此页面的主体是通过调用现有的Perl脚本创建的。 此Perl脚本由外部托管 有没有办法做到这一点: <!-- #Include virtual="http://www.example.com/theScript.plx"--> Response.Write(GetHtmlPage("http://www.example.com/theScript.plx")); 不作为直接包含,因为需要在服务器上编译页面
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
Response.Write(GetHtmlPage("http://www.example.com/theScript.plx"));
不作为直接包含,因为需要在服务器上编译页面 当页面加载时,您可以使用该URL下载HTML,尽管我知道这并不完美
或者(我不知道这是否可行)您可以从ASP.NET MVC控制器对perl网页执行一个脚本,并将生成的HTML作为文本放在视图中。通过这种方式,如果perl页面不经常更改,您可以利用诸如将点击限制在perl页面上之类的方法。您可以通过简单地使用框架并将框架源设置为需要包含的url来以低调的方式实现这一点。这非常简单,可以在没有任何服务器或客户端脚本的情况下关闭,所以如果可能的话,这是我首选的方法
但是,如果您希望html显示为来自您的服务器,则需要手动包含它—通常使用Neil所说的
WebRequest
。不过,您可能希望缓存远程页面以提高性能,因为它是一个perl脚本,所以我假设该页面是动态的,所以这可能不是一个好主意。如果您想一次完成所有操作,您可以从服务器发出HTTP请求并将内容写入页面
大概是这样的:
<!-- #Include virtual="http://www.example.com/theScript.plx"-->
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;
}
(大多数代码都是明目张胆地从中删除的,因此没有进行检查)起初我采取了类似的方法。我的控制器将获取HTML并通过TempData传递它。然而,从plx返回的结果是带有相对链接的整个页面(包括头部、身体等)。所以它必须在一个框架内。啊,我明白你的意思,鲍里斯。框架可能是一种方法,除非你想剥离你不需要的html——我不建议:)或者,你可以先清除响应,然后写出页面,但是你只会从另一台服务器发送响应。如果需要发送标准布局、菜单或任何其他html,则会丢失它。