我有一个带过滤器的HttpModule(PageFilter),其中每个页面请求都会调用PageFilter的Writer方法两次,但遗憾的是没有相同的结果。
过滤器的想法是找到“”并在此前插入一些文本/脚本。我找到了一堆小错误(并纠正了它们),但这个错误对我起了诡计......
构造函数og PageFilter被调用一次,但每个请求调用它的writer方法两次?
下面是PageFilter.Writer(运行两次)的内容
string strBuffer = System.Text.UTF8Encoding.UTF8.GetString (buffer, offset, count);
try
{
Regex eof = new Regex("</html>", RegexOptions.IgnoreCase);
if (!eof.IsMatch(strBuffer))
{
//(1)
responseHtml.Append(strBuffer);
}
else
{
//(2)
responseHtml.Append (strBuffer);
string finalHtml = responseHtml.ToString ();
Regex re = null;
re = new Regex ("</body>", RegexOptions.IgnoreCase);
finalHtml = re.Replace(finalHtml, new MatchEvaluator(lastWebTrendsTagMatch));
// Write the formatted HTML back
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (finalHtml);
responseStream.Write(data, 0, data.Length);
}
}
catch (Exception ex)
{
Logging.Logger(Logging.Level.Error, "Failed writing the HTML...", ex);
}
第一次运行case(1)运行并且运行第二种情况(2)运行...这不是我想要的,任何人都知道为什么和/或我如何使其工作(一致)?
答案 0 :(得分:1)
对于单个页面,可以多次调用Write方法。 HttpWriter对象将数据组合在一起,然后将其写入其输出流。每次HttpWriter发出一大块数据时,都会调用响应过滤器的Write方法。
请参阅此类解决方案......
而不是responseStream.Write(data,0,data.Length); 尝试responseStream.Write(data,0,data.Length-1);
希望你觉得这很有用。
答案 1 :(得分:0)
这些“事件”发生在1页请求中:
isAspx = true og / _layouts / not found (我验证该文件是.aspx和 网址不包含/ _layouts /)
PageFilter构造函数名为
发起的作家方法......
(正则表达式):(正则表达式包含 为匹配而创建) !eof.IsMatch(strBuffer):(没有 匹配正则表达式)
发起的作家方法......(第二名 围绕着作家的时间)
(正则表达式):(正则表达式包含 为匹配而创建) 正则表达式启动(匹配正则表达式)
(正则表达式):(找到了身体 标签我需要插入我的脚本) ScriptInclude = true(我找到了 web.config键告诉我的应用程序 应该包括脚本)
使用了美国脚本(我使用过美国 该脚本的版本也基于 web配置密钥)
问题是:在我的开发部署中,编写器运行两次,最后得到上面的序列并包含脚本。在我的测试部署中,编写器运行两次,最终不包括脚本......
我想避免两次调用Writer,但更喜欢将脚本包含在测试部署中