PagePaserで作成したPageをHttpHandlerとして使用
4808 ワード
ASP.NETでは、pageは実際にはHttpHandlerであり、要求を処理し、Htmlの山を返します.では、Pageクラスをインスタンス化して処理の結果を得ることができますか?簡単な推理でこれはだめだと説明できます.Pageをインスタンス化するとnew Page()が標準的になるからです.Netコード、コンパイラは関連するPageを知ることができません.aspxの内容.だからPagePaserの助けが必要で、PagePaserもASPです.NET内部コンパイルプロセスの重要なステップ.使用方法を見てみましょう.
ここで重要なステップはPageParserです.GetCompiledPageInstanceはHttpHandlerをインスタンス化し、すべてのHtmlを返します.
protected
void
Page_Load(
object
sender, EventArgs e)
{
Response.Write(HttpUtility.HtmlEncode(DumpHtmlFrom(
"
~/Default.aspx
"
)));
}
//
virtualPath: allow queries
string
DumpHtmlFrom(
string
virtualPath)
{
StringWriter writer
=
new
StringWriter();
var path
=
Request.Url.Scheme
+
"
://
"
+
Request.Url.Authority
+
VirtualPathUtility.ToAbsolute(virtualPath);
var parts
=
virtualPath.Split(
'
?
'
);
string
query
=
string
.Empty;
if
(parts.Length
>
1
)
query
=
parts[
1
];
virtualPath
=
parts[
0
];
HttpContext context
=
new
HttpContext(
new
HttpRequest(virtualPath, path, query),
new
HttpResponse(writer));
var handler
=
PageParser.GetCompiledPageInstance(virtualPath, MapPath(virtualPath), context);
handler.ProcessRequest(context);
return
writer.ToString();
}
ここで重要なステップはPageParserです.GetCompiledPageInstanceはHttpHandlerをインスタンス化し、すべてのHtmlを返します.