繁体   English   中英

响应过滤器asp.net

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM