如何从ViewResult拦截HTML,修改它并提供它?

我正在写一个简单的CMS。

我希望能够加载一个View,将其包含在母版页中,然后扫描HTML以便我可以用我自己的博客输出替换一些自定义标签(如{{blog}}),然后将其提供给浏览器。

如何从ViewResult访问HTML以拦截它?

听起来你想写一个ActionFilterAttribute 。 该属性具有以下方法:

  • OnActionExecuting – 在执行修饰操作之前调用
  • OnActionExecuted – 在调用action方法之后但在呈现ActionResult之前调用。
  • OnResultExecuting – 在呈现结果之前调用
  • OnResultExecuted – 在渲染结果后调用

这里有一个示例,它返回JSON或XML数据,具体取决于“Content-type”标题: 使用ASP.NET MVC创建REST API,它同时使用Json和plain Xml

这将是棘手的,因为ViewResult将其响应直接写入Response.Stream。 因此,您可能必须处理Response.Filter属性以将ViewResult输出到MemoryStream,以便您可以在返回ContentResult之前操作内容。 所有这些都可能发生在OnResultExecuting上。