C# 服务器端是否包含外部HTML?

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")); 不作为直接包含,因为需要在服务器上编译页面

在我的asp.net-mvc应用程序中,我需要包含一个显示遗留页面的页面。 此页面的主体是通过调用现有的Perl脚本创建的。 此Perl脚本由外部托管

有没有办法做到这一点:

<!-- #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,则会丢失它。