响应过滤器asp.net

时间:2010-03-07 07:52:54

标签: asp.net filter response

我在处理响应过滤器。我试图捕捉所有表达: $ 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方法中的正则表达式捕获。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您缺少正则表达式模式中的第一个$。应该是:^\$\w+?\.\w+?\$。如果你使用它,那么它应该匹配。

我确定还有其他人,但测试.NET reg ex模式的一种方法是使用this online tester

您可能遇到的另一个问题是ASP.NET会将输出分成多个块,因此可以多次调用您的过滤器(每个需要处理的块)。这可能会使您的正则表达式模式不匹配,因为整个页面不在一起。以下是与此相关的一些文章和一些解决方案: Article 1 @ west-wind.comArticle 2 @ highoncoding.com

唯一可能存在问题的是如果编码不正确。在上面的西风文章中,他为GetString和GetBytes方法执行以下操作:

Encoding encoding = HttpContext.Current.Response.ContentEncoding;
string output = encoding.GetString(..);
byte[] buffer = encoding.GetBytes(output);