2009-09-30 11 views
1

Dans mon application asp.net-mvc, j'ai besoin d'inclure une page qui montre une page héritée. Le corps de cette page est créé en appelant un script Perl existant. Ce script Perl est hébergé de manière externe.Côté serveur inclure HTML externe?

Est-il possible de faire quelque chose comme ceci:

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

Répondre

2

Pas comme incluent directe, car ASP.NET server-side-includes exigent que la page soit compilé sur le serveur.

Vous pouvez utiliser jQuery pour télécharger le code HTML de cette URL lorsque la page est chargée, même si je comprends que ce n'est pas parfait. Sinon (et je ne sais pas si cela fonctionnera), vous pouvez exécuter un WebRequest sur la page Web perl à partir de votre contrôleur ASP.NET MVC et placer le code HTML résultant dans la vue sous forme de texte. De cette façon, vous pouvez utiliser des choses comme output caching pour limiter les hits à la page perl si elle ne change pas souvent.

0

Vous pouvez implémenter cela de manière discrète en utilisant simplement un cadre et en définissant la source de trame sur l'URL à inclure. C'est assez simple et peut être arrêté sans aucun script côté serveur ou client, ce serait donc mon approche préférée, si possible. Toutefois, si vous souhaitez que le code HTML apparaisse sur votre serveur, vous devez l'inclure manuellement, en général en utilisant WebRequest comme le dit Neil. Vous voudrez peut-être mettre en cache la page distante pour la performance, cependant, puisque c'est un script perl, je suppose que la page est dynamique, donc ce n'est peut-être pas une bonne idée.

1

Si vous vouliez tout faire en une fois, vous pouviez faire une requête HTTP depuis le serveur et écrire le contenu sur la page?

Quelque chose comme ceci:

Response.Write(GetHtmlPage("http://www.example.com/theScript.plx")); 

appel à cette méthode:

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; 
} 

(La plupart du code déchiré de façon flagrante de here et donc pas vérifié)

+0

Je pris une approche similaire au premier. Mon contrôleur obtiendrait le code HTML et le transmettrait via TempData. Le résultat renvoyé par le plx est cependant une page entière (incluant la tête, le corps, etc.) avec des liens relatifs. Donc, ça doit aller dans un cadre de toute façon. –

+0

Ahh, je vois ce que tu veux dire, boris. Un cadre est probablement la voie à suivre, sauf si vous voulez descendre le chemin de dépouiller html vous n'avez pas besoin - je ne le recommanderais pas :) – Damovisa

+0

Sinon, vous pouvez effacer la réponse d'abord, puis écrivez la page , mais alors vous enverriez seulement la réponse de l'autre serveur. S'il existe une mise en page standard, un menu ou tout autre code HTML à envoyer, vous risquez de le perdre. – Damovisa

Questions connexes