asp.net MVC 3/4相当于一个response.filter
发布时间:2020-12-16 03:41:48 所属栏目:asp.Net 来源:网络整理
导读:我需要拦截将发送到浏览器的所有html并替换那里的一些标签.这需要在全球范围内和每个视图中完成.使用C#在ASP.NET MVC 3或4中执行此操作的最佳方法是什么?在过去,我使用Global.asax(vb)中的’response.filter’在ASP.net Webforms中完成了此操作 Private Sub
我需要拦截将发送到浏览器的所有html并替换那里的一些标签.这需要在全球范围内和每个视图中完成.使用C#在ASP.NET MVC 3或4中执行此操作的最佳方法是什么?在过去,我使用Global.asax(vb)中的’response.filter’在ASP.net Webforms中完成了此操作
Private Sub Global_PreRequestHandlerExecute(ByVal sender As Object,ByVal e As System.EventArgs) Handles MyBase.PreRequestHandlerExecute Response.Filter = New ReplaceTags(Response.Filter) End Sub 这会调用我创建的一个继承自system.io.stream的类,并通过html来替换所有标记. 解决方法
您仍然可以在ASP.NET MVC中使用响应过滤器:
public class ReplaceTagsFilter : MemoryStream { private readonly Stream _response; public ReplaceTagsFilter(Stream response) { _response = response; } public override void Write(byte[] buffer,int offset,int count) { var html = Encoding.UTF8.GetString(buffer); html = ReplaceTags(html); buffer = Encoding.UTF8.GetBytes(html); _response.Write(buffer,offset,buffer.Length); } private string ReplaceTags(string html) { // TODO: go ahead and implement the filtering logic throw new NotImplementedException(); } } 然后编写一个自定义操作过滤器,它将注册响应过滤器: public class ReplaceTagsAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var response = filterContext.HttpContext.Response; response.Filter = new ReplaceTagsFilter(response.Filter); } } 现在剩下的就是装饰你想要应用这个过滤器的控制器/动作: [ReplaceTags] public ActionResult Index() { return View(); } 如果要应用于所有操作,请将其注册为Global.asax中的全局操作筛选器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-5 – 如何添加声明在ASP.NET身份
- asp.net-mvc – WebApi Action过滤器调用两次
- asp.net – UpdatePanel如何实际工作?
- asp.net-core – 项目’XXXXXX’没有锁文件.请运行“dotnet
- Asp.net core应用在 Kubernetes上内存使用率过高问题分析
- asp.net-mvc – 使用自定义段变量设置ASP.Net MVC 4路由
- 如何在使用MasterPage的ASP.NET Web窗体中设置服务器控件的
- asp.net-mvc如何更改宽度Html.TextBox
- 使用asp.net核心身份将数据存储在cookie中
- 将下拉列表绑定到详细信息视图的下载列表ASP.NET C#