[英]Response filter asp.net
我正在研究响应过滤器。 我正在尝试捕获所有表达式: $ sometext.sometext $,并使用以下正则表达式:^ \\ w +?。\\ w +?\\ $
在我的实现中,它看起来像:
public override void Write(byte[] buffer, int offset, int count)
{
// Convert the content in buffer to a string
string contentInBuffer = UTF8Encoding.UTF8.GetString(buffer);
string regex=@"^\\w+?\.\w+?\$";
RegexOptions options = RegexOptions.Multiline;
MatchCollection matches = Regex.Matches(contentInBuffer , regex, options);
foreach (Match match in matches)
{
string value = match.Value;
}
outputStream.Write(UTF8Encoding.UTF8.GetBytes(contentInBuffer), offset, UTF8Encoding.UTF8.GetByteCount(contentInBuffer));
}
问题是当我在aspx页面上写入$ Catch.Me $时,它不会被write方法中的正则表达式捕获。 我缺少什么?
您缺少正则表达式模式中的第一个$。 应该是: ^\\$\\w+?\\.\\w+?\\$
。 如果使用此选项,则它应该匹配。
我敢肯定还有其他方法,但是测试您的.NET reg ex模式的一种方法是使用此在线测试器 。
您可能遇到的另一个问题是ASP.NET将输出分成多个块,因此您的过滤器可能被多次调用(每个块都需要处理)。 这可能会使您的正则表达式模式不匹配,因为整个页面不在同一位置。 以下是与此相关的一些文章以及一些解决方案: 第1条@ west-wind.com , 第2条@ highoncoding.com 。
唯一可能出现问题的问题是编码是否正确。 在上面的西风文章中,他为他的GetString和GetBytes方法执行以下操作:
Encoding encoding = HttpContext.Current.Response.ContentEncoding;
string output = encoding.GetString(..);
byte[] buffer = encoding.GetBytes(output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.