问题如下:
我想在过滤器中截取一个Action返回View时生成的页面内容 的文本,
我在
OnResultExecuted(ResultExecutedContext filterContext) 中获取到了
filterContext.HttpContext.Response;
但是如何获取生成的HTML内容呢,这里好像是没有获取到
示例:
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
TextWriter tw = filterContext.HttpContext.Response.Output;
//这个output和OutputStream 都不能正确获取到,求大神帮忙,这个思路是否正确,能给个解决方案。
}
using System; using System.Net; using System.Text; using System.Text.RegularExpressions; class Program { // 获取网页的HTML内容,根据网页的charset自动判断Encoding static string GetHtml(string url) { return GetHtml(url, null); } // 获取网页的HTML内容,指定Encoding static string GetHtml(string url, Encoding encoding) { byte[] buf = new WebClient().DownloadData(url); if (encoding != null) return encoding.GetString(buf); string html = Encoding.UTF8.GetString(buf); encoding = GetEncoding(html); if (encoding == null || encoding == Encoding.UTF8) return html; return encoding.GetString(buf); } // 根据网页的HTML内容提取网页的Encoding static Encoding GetEncoding(string html) { string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)"; string charset = Regex.Match(html, pattern).Groups["charset"].Value; try { return Encoding.GetEncoding(charset); } catch (ArgumentException) { return null; } } // 根据网页的HTML内容提取网页的Title static string GetTitle(string html) { string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>"; return Regex.Match(html, pattern).Groups["title"].Value.Trim(); } // 打印网页的Encoding和Title static void PrintEncodingAndTitle(string url) { string html = GetHtml(url); Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html)); } // 程序入口 static void Main() { PrintEncodingAndTitle("http://www.msdn.net/"); PrintEncodingAndTitle("http://www.cnblogs.com/"); PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/"); PrintEncodingAndTitle("http://www.csdn.net/"); PrintEncodingAndTitle("http://news.163.com/"); } }
以上代码是我自己项目中用到的, 我稍微改了一些敏感信息直接贴给你了, 如果有问题的话就继续追问, 没问题的话就采纳吧
很感谢你的答案,但是我不是要提取html代码,而是mvc视图引擎渲染后在返回浏览器之前我想在代码里面先获取到这些内容。
是这个Render之后,放在缓冲区Buffer里面的内容
自己已经解决了
请问是怎么解决的,我也急寻这个答案
请写一下你的代码呗,最近遇到跟你一样的问题!你是怎么解决的?
@yang.liao: 这个问题,我已经解决了,谢谢!