2009-09-30 3 views
1

В моем приложении asp.net-mvc мне нужно включить страницу, которая показывает устаревшую страницу. Тело этой страницы создается путем вызова существующего скрипта Perl. Этот скрипт Perl находится на внешнем хостинге.На стороне сервера есть внешний HTML?

Есть ли способ сделать что-то вроде этого:

<!-- #Include virtual="http://www.example.com/theScript.plx"--> 

ответ

2

не как прямые включать, потому что ASP.NET server-side-includes требуют, чтобы страница быть скомпилирована на сервере.

Вы можете использовать jQuery, чтобы загрузить HTML-код с этого URL-адреса при загрузке страницы, хотя я ценю, что это не идеально.

В качестве альтернативы (и я не знаю, будет ли это работать) вы можете выполнить WebRequest на веб-странице perl с вашего ASP.NET MVC-контроллера и поместить полученный HTML в виде в виде текста. Таким образом, вы можете использовать такие вещи, как output caching, чтобы ограничить количество просмотров страницы perl, если она не меняется часто.

0

Вы можете реализовать это с низким ключом, просто используя фрейм и установив источник кадра в URL-адрес, который должен быть включен. Это довольно просто и может быть без скриптов на сервере или на стороне клиента, так что это был бы мой предпочтительный подход, если это было возможно.

Если вы хотите, чтобы html отображался на вашем сервере, однако вам необходимо вручную включить его - обычно с помощью WebRequest, как говорит Нейл. Возможно, вы захотите кэшировать удаленную страницу для производительности, но поскольку это скрипт perl, я предполагаю, что страница динамическая, поэтому это может быть не очень хорошая идея.

1

Если вы хотите сделать все за один раз, вы можете выполнить 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 и поэтому не проверено)

+0

я принял аналогичный подход в первом. Мой контроллер получит HTML-код и передаст его через TempData. Результат, который возвращается из plx, однако, представляет собой целую страницу (включая голову, тело и т. Д.) С относительными ссылками. Так или иначе, он должен идти в кадре. –

+0

А, я понимаю, что вы имеете в виду, борис. Кадр, вероятно, является тем, что нужно сделать, если вы не хотите идти по пути удаления из html, который вам не нужен, - я бы не рекомендовал этого :) – Damovisa

+0

В качестве альтернативы вы можете сначала очистить ответ, а затем выписать страницу , но тогда вы будете отправлять ТОЛЬКО ответ от другого сервера. Если есть стандартный макет, меню или любой другой html, который вам нужно отправить, вы потеряете его. – Damovisa

 Смежные вопросы

  • Нет связанных вопросов^_^