Лучший способ внедрить HTML в страницу (на стороне сервера) в ASP.NET - PullRequest
2 голосов
/ 20 июня 2011

У меня есть HTTPHandler, который возвращает кусок HTML.Какой лучший способ внедрить это в элемент управления на сервере?

У меня это в основном работает с использованием asp: literal и с помощью WebClient.downloadString (), чтобы получить текст из обработчика

<asp:Literal runat="server" ID="Text_Page1" Visible="false"></asp:Literal>
<asp:Literal runat="server" ID="Text_Page2" Visible="false"></asp:Literal>

, а затем в методах на стороне сервера:

Text_Page1.Text = new WebClient().DownloadString("http://localhost:666/" +sPage1URL);
Text_Page2.Text = new WebClient().DownloadString("http://localhost:666/" +sPage2URL);

Жестко закодированный веб-адрес только для тестирования в данный момент.Ранее я пытался просто использовать «~ /» + URL, чтобы попытаться создать его, но библиотека WebClient вызвала исключение, говорящее, что URL был слишком длинным (что не соответствует действительности, я не думаю)

Любые идеиНаилучший способ сделать это со стороны сервера?

Редактировать : Когда я говорю «Лучший», я имею в виду наиболее эффективный и придерживающийся «лучших практик».Мой метод не работает так хорошо, когда он помещен в аутентифицированный IIS.У меня проблемы с аутентификацией.Я думал, что выполнение

WebClient oClient = new WebClient();
oClient.Credentials = CredentialCache.DefaultCredentials;
oClient.UseDefaultCredentials = true;
String sData = oClient.DownloadString(sURL); 

будет работать, но я получаю ошибку 401.У кого-нибудь есть альтернативы?

Приветствия

Гордон

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Не задавая вопросов о причинах получения html через веб-запрос из того же приложения, обслуживающего содержимое включения, я бы обернул функциональность в WebUserControl. Что-то вроде:

using System;
using System.Net;
using System.Web.UI;

public partial class HtmlFetcher : UserControl
{
    //configure this somewhere else in the real world, web.config maybe
    private const string ServiceUrl = "http://localhost:666/";

    public string HtmlPath { get; set; }

    protected override void Render(HtmlTextWriter output)
    {
        string outputText = String.Empty;
        try
        {
            outputText = new WebClient().DownloadString(string.Format("{0}{1}", ServiceUrl, HtmlPath));

        } catch (Exception e)
        {
            //Handle that error;
        }
        output.Write(outputText);
    }
}

Вот как бы вы добавили его на свою страницу:

<%@ Register src="HtmlFetcher.ascx" tagname="HtmlFetcher" tagprefix="uc1" %>
<uc1:HtmlFetcher ID="HtmlFetcher1" HtmlPath="some-test-file.html" runat="server" />
1 голос
/ 20 июня 2011

вы получите данные в строке lcHtml, затем будете использовать их как хотите

 // *** Establish the request
    string lcUrl = "http://yourURL";
HttpWebRequest loHttp =
         (HttpWebRequest) WebRequest.Create(lcUrl);

    // *** Set properties
    loHttp.Timeout = 10000;     // 10 secs
    loHttp.UserAgent = "Code Sample Web Client";

    // *** Retrieve request info headers
    HttpWebResponse loWebResponse = (HttpWebResponse) loHttp.GetResponse();

    Encoding enc = Encoding.GetEncoding(1252);  // Windows default Code Page

    StreamReader loResponseStream =
       new StreamReader(loWebResponse.GetResponseStream(),enc);

    string lcHtml = loResponseStream.ReadToEnd();

    loWebResponse.Close();
    loResponseStream.Close();
0 голосов
/ 20 июня 2011

Вы можете использовать серверные кодовые блоки в aspx с <% %>.

Попробуйте:

<% new WebClient().DownloadString("http://localhost:666/" +sPage1URL) %>
...