0
私はカスタムIHttpModuleを書きましたが、ソースに終了タグがないと問題を引き起こしています。私はCMSのいくつかのページに亘って走っています。これは、.aspxページがハンドラのように使用され、htmlを閉じてajaxを介してユーザーに応答するために実行しています。ここで IHttpModule Response.Filter Write With No Close HTML
は私のソースです:あなたは出力が閉じHTMLタグを持っていない場合にのみblammo、書き込みが呼び出された最後の時間を置き換えますが、ないので、これは素晴らしいです見ることができるようにpublic class HideModule : IHttpModule
{
public void Dispose()
{
//Empty
}
public void Init(HttpApplication app)
{
app.ReleaseRequestState += new EventHandler(InstallResponseFilter);
}
// ---------------------------------------------
private void InstallResponseFilter(object sender, EventArgs e)
{
HttpResponse response = HttpContext.Current.Response;
string filePath = HttpContext.Current.Request.FilePath;
string fileExtension = VirtualPathUtility.GetExtension(filePath);
if (response.ContentType == "text/html" && fileExtension.ToLower() == ".aspx")
response.Filter = new PageFilter(response.Filter);
}
}
public class PageFilter : Stream
{
Stream responseStream;
long position;
StringBuilder responseHtml;
public PageFilter (Stream inputStream)
{
responseStream = inputStream;
responseHtml = new StringBuilder();
}
//Other overrides here
public override void Write(byte[] buffer, int offset, int count)
{
string strBuffer = System.Text.UTF8Encoding.UTF8.GetString (buffer, offset, count);
Regex eof = new Regex ("</html>", RegexOptions.IgnoreCase);
if (!eof.IsMatch (strBuffer))
{
responseHtml.Append (strBuffer);
}
else
{
responseHtml.Append (strBuffer);
string finalHtml = responseHtml.ToString();
//Do replace here
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(finalHtml);
responseStream.Write(data, 0, data.Length);
}
}
#endregion
}
。
私の最善の選択肢は、閉じたhtmlが見つからない場合は、新しいフィルタを追加しないことです。しかし、私は早くフルストリームを傍受できるとは思わない。それが失敗するのは、終了HTMLタグを探す以外にストリームの終わりにWriteを検出する別の方法ですか?
ありがとうございます。