Чтение ASPX-файлов из файловой системы и рендеринг в HTML - PullRequest
4 голосов
/ 30 июня 2010

Можно ли прочитать файл aspx и отобразить как файл html, а затем записать полученный файл html на диск?

Файл .aspx находится в файловой системе без файла codebehind. Если это возможно, предоставьте пример кода.

Ответы [ 6 ]

2 голосов
/ 30 июня 2010

с удаленного URL

byte[] buf = new byte[8192];
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(path);
webRequest.KeepAlive = false;
string content = string.Empty;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
if (!(webResponse.StatusCode == HttpStatusCode.OK))
    if (_log.IsErrorEnabled) _log.Error(string.Format("Url {0} not found", path));

Stream resStream = webResponse.GetResponseStream();

int count = 0;
do
{
    count = resStream.Read(buf, 0, buf.Length);
    if (count != 0)
    {
        content += encoding.GetString(buf, 0, count);
    }
}
while (count > 0);

по сети или виртуальному пути

string content = string.Empty;
path = HttpContext.Current.Server.MapPath(path);

if (!File.Exists(path))
if (_log.IsErrorEnabled) _log.Error(string.Format("file {0} not found", path));

StreamReader sr = new StreamReader(path, encoding);
content = sr.ReadToEnd();
1 голос
/ 30 июня 2010

Вам нужно использовать класс wwAspRuntimeHost.

У Рика Стрэла была статья на эту тему, и я фактически использовал тот же подход, который он рекомендовал для размещения механизма выполнения ASP.NET в среде, отличной от IIS. Вот ссылка:

http://www.west -wind.com / презентации / aspnetruntime / aspnetruntime.asp

(обновить к исходному сообщению)
http://www.west -wind.com / Weblog / сообщений / 1197.aspx

1 голос
/ 30 июня 2010

Это то, что ASP.NET делает все время.Он ищет страницу ASPX в файловой системе, компилирует ее, если требуется, и затем обрабатывает запрос.

Codebehind является необязательным.У вас может быть веб-сайт с только ASPX, без какого-либо предварительно скомпилированного кода.

Вот страница ASPX без кода

<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
    <title>ClearCache</title>
</HEAD>
<body>
    <form id="ClearCache" method="post" runat="server">
        <% 
        IList keys = new ArrayList(Cache.Count);
        foreach (DictionaryEntry de in Cache) 
            keys.Add(de.Key);

        foreach (string key in keys)
        {
            this.Response.Write(key + "<br>");
            Cache.Remove(key);

        }

    %>
    </form>
</body>
</HTML>

Загрузка файла в формате HTML:

var wc = new WebClient();
wc.DownloadFile(myUrl, filename);

Если у вас нет веб-сервера ASP.NET, вам нужно запустить сервер. Кассини отлично подходит для этого.Тогда ваш код должен выглядеть следующим образом:

var server = new Server(80,"/", pathToWebSite);
server.Start();
var wc = new WebClient();
wc.DownloadFile(server.RootUrl + "myPage.aspx", filename);
server.Stop();

Если вы выполняете это более одного раза, сервер должен быть кэширован.

Обратите внимание, что вы также можете использовать RuntimeHost, как указано в code4life.Кассини делает нечто подобное.Я бы попробовал гот и увидел, что лучше подходит для вашей цели.

0 голосов
/ 30 июня 2010

Если я правильно понимаю ваш вопрос, вы хотите, чтобы был создан экземпляр класса Page (т. Е. Aspx-страница скомпилирована) и, наконец, получился HTML-файл?Но вы хотите, чтобы это происходило вне контекста запроса веб-сервера?

Если вы ищете html после фактической обработки aspx-страницы, почему бы просто не взять html, возвращенный после того, как страница действительно отрисованачерез IIS или что-то еще?

Возможно, если вы поделитесь своей мотивацией (попытками) сделать это, вы получите несколько убедительных предложений ...

0 голосов
/ 30 июня 2010

Не думаю, что вы можете делать то, что вам нужно, без среды выполнения ASP.NET. Если у вас есть среда выполнения ASP.NET, и вы все еще хотите создавать файл HTML из содержимого файла ASPX, вы можете написать IHttpModule, который записывает текст ответа в файл.

0 голосов
/ 30 июня 2010

ASPX-файлы являются динамическими => сгенерированный HTML зависит от состояния приложения.
Если вам не хватает файла codebehind, вы не сможете правильно перевести код.

Mono Project имеет оценщик кода. Тем не менее, это не поможет вам без состояния приложения.

Единственное, что вы можете сделать, - это проанализировать файл aspx как xml (если он действителен) и отфильтровать динамический контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...