OnResultExecuting获取渲染后的html内容后,OnResultExecuted重新写入,并发问题?????
夏日麦田 2019-06-23 02:53:43 public class ResultFilterAttribute : ActionFilterAttribute
{
//用于保存渲染后的html文本
StringBuilder sb;
//这几个Writer照着写就行了
StringWriter sw;
HtmlTextWriter hw;
TextWriter tw;
/// <summary>
///加载 "视图" 前执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
//保存html
sb = new StringBuilder();
//两个writer
sw = new StringWriter(sb);
hw = new HtmlTextWriter(sw);
//记住Response中原本输出流,用于返回本次请求的html,与下一句配合使用
//在渲染结束后,向tw内写入html内容
tw = filterContext.RequestContext.HttpContext.Response.Output;
//过滤器自己输出流,用于获取渲染后的html内容
filterContext.RequestContext.HttpContext.Response.Output = hw;
}
/// <summary>
/// 加载"视图" 后执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
string html = sb.ToString();
//对页面进行二次处理 在输出新的html 写入 filterContext.RequestContext.HttpContext.Response.Output
tw.Write(html);
}
}
问题:如果多次刷新页面,会导致内容追加显示别的HTML内容,或者是页面内容无法显示,显示空白,请问如何处理并发,正常输出页面