首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何拦截.NET MVC3中当前actionresult的输出流?

拦截.NET MVC3中当前ActionResult的输出流,可以通过以下方法实现:

  1. 自定义ActionFilterAttribute

自定义一个继承自ActionFilterAttribute的类,并重写OnActionExecuted方法,在该方法中可以获取到当前的ActionResult,并对其进行处理。

代码语言:csharp
复制
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ContentResult;
        if (result != null)
        {
            // 处理输出流
            result.Content = "Hello World!";
        }
    }
}
  1. 应用自定义ActionFilterAttribute

在需要拦截输出流的Controller或Action上应用自定义的ActionFilterAttribute。

代码语言:csharp
复制
[CustomActionFilter]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return Content("This is the original content.");
    }
}
  1. 使用HttpModule

通过创建一个HttpModule,可以在Response的输出流中拦截并处理数据。

代码语言:csharp
复制
public class CustomHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
    }

    private void OnPreRequestHandlerExecute(object sender, EventArgs e)
    {
        var application = (HttpApplication)sender;
        var response = application.Response;
        var filter = new MemoryStream();
        var sw = new StreamWriter(filter);
        var tw = new HtmlTextWriter(sw);
        response.Filter = filter;
        var original = response.Output;
        response.Output = tw;
        response.Flush();
        response.Output.Flush();
        filter.Position = 0;
        var reader = new StreamReader(filter);
        var html = reader.ReadToEnd();
        // 处理输出流
        response.Output.Write(html);
        response.Output.Flush();
    }

    public void Dispose()
    {
    }
}
  1. 在Web.config中配置HttpModule
代码语言:xml<system.webServer>
复制
 <modules>
    <add name="CustomHttpModule" type="YourNamespace.CustomHttpModule, YourAssemblyName"/>
  </modules>
</system.webServer>

通过以上方法,可以实现拦截.NET MVC3中当前ActionResult的输出流,并对其进行处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MVC3教程之新手入门

一、工具选择 要进行MVC3开发,请确保你计算机上面已经安装了如下软件: Visual Studio Web Developer Express with SQL Express ASP.NET...step1.新建MVC3项目 打开新建项目窗口,在“已安装模板”列表中选择“Web”,在右侧应用程序模板列表中选择“ASP.NET MVC3 Web应用程序”,修改项目名称为“MVCHelloworld...step6.使用ViewBag传递参数 继续修改控制器Welcome方法,为它添加一个名为namestring类型参数,修改后代码如下: public ActionResult Welcome(... ViewBag.Title是用来显示当前页面的标题。 ViewBag.name使我们在控制器添加属性,在这里可以直接使用。...OK,本节就到此结束了,在本节,我们演示了如何创建MVC3项目、添加控制器、添加视图、为视图传递参数等操作,在下一节,我们会引入实体模型、Entity Framework4.1 Code-First

1.5K20

MVC 3.0 新特性 摘要

前言 ASP.NET MVC3 在 ASP.NET MVC 1 和 2 基础上,增加了大量特性,使得代码更加简化,并且可以深度扩展。...新 ActionResult 类型 下面的 ActionResult 类型在 MVC3 是新增或者被扩展。 . 向客户端返回 404 HTTP 状态....ValidationAttribute 类 在 .NET Framework4 中被改进 ValidationAttribute 类支持新 IsValid 重载,提供关于当前验证上下文更多信息,例如什么对象被验证了...这允许你基于 Model 其他属性来验证当前值,例如,新 CompareAttribute 就允许你比较 Model 两个属性值,在下面的例子,ComparePassword 属性必须匹配 Password...部分页输出缓存 ASP.NET MVC 从版本1 开始支持整页缓存,MVC3 还提供了部分页缓存。

2.6K10
  • Asp.Net MVC3 简单入门第一季(一)环境准备

    第一节:关于Asp.Net MVC3 Asp.Net MVC已经到第三版了,相信大家也都熟悉了,我也不再重复相关概念性东西了。...但是大家一定要了解,Asp.Net MVC是微软一个开源UI层框架,是AspNet另外一种开发模式。好废话不多说,那我们开始进入Asp.Net MVC3 学习来,工欲善其事,必先利其器!...) 下面提供一些URL链接方便大家下载学习: 1)Asp.Net MVC3官网:http://www.asp.net/mvc/mvc3 如下图所示: 这个大家在安装过程可能时间会非常长(>=20... MVC3项目 1)创建项目: 2)选择项目的默认视图引擎 我们选择一个Empty模板,然后选择Razor视图引擎(Asp.Net MVC3提供视图引擎)选择HTML5标记支持打上勾(这块我也不了解...3)创建后项目: Asp.Net MVC3貌似跟之前版本创建项目模板没什么大不同,文件夹也基本相似。当然我们看到文件夹内Jquery包更新到了1.5.1 。

    50110

    ASP.NET MVC5高级编程——(2)MVC模式视图与Razor引擎

    Razor引擎由.NET MVC3 版本引入,语法简单而雅致,最明显变化是用“@”替代“”。创建项目时,两种视图引擎只能选其一。...此处选择是/Views/Home/Index.cshtml。 ? 与ASP.NET MVC大部分方法一样,这一约定是可以重写。...在Controller方法,可以通过向重载View方法传递模型实例来指定模型,代码如下: 1 public ActionResult List() 2 { 3 var Musics = new...2.视图模型 先写一个新方法到HomeCOntroller控制器,Edit: public ActionResult Edit() { return...例如,在下面的这个例子中就是展示如何在一个条件语句块显示纯文本 1 @if (showMessage) 2 { 3 this is plain text 4 } 或者

    3.6K50

    ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

    与在ASPX试图引擎类似,如果要输出特殊字符串,还是借助HtmlHelper类提供扩展方法来实现。   ...因此,我们既可以在Action返回视图,还可以返回文件、重定向、空内容等结果。...(3)File:通过File可以向浏览器返回一段文件,主要用于输出一些图片或文件提供下载等; public ActionResult FileStreamResultDemo() { FileStream...那么,它是根据什么规则来指路呢?我们可以在App_Start文件夹RouteConfig类中找到这个神奇规则是如何制定。...5—控制器》,http://www.cnblogs.com/powertoolsteam/p/aspnet-mvc5-controller.html   (3)李亮,《ASP.Net MVC3 Controller

    1.8K30

    了解ASP.NET MVC几种ActionResult本质:FileResult

    在这篇文章我们将探讨三种具体FileResult是如何将文件内容对请求进行响应。[本文已经同步到《How ASP.NET MVC Works?》...FileResult仅仅是一个抽象类,文件内容输出实现在抽象方法WriteFile,该方法会在重写ExecuteResult方法调用。...FileContentResult针对文件内容响应实现也很简单,从如下所示WriteFile方法定义可以看出,它只是调用当前HttpResponseOutputStream属性Write方法直接将表示文件内容字节数组写入响应输出...在实现WriteFile方法,FileStreamResult通过指定文件读取文件内容,并最终调用当前HttpResponseOutputStream属性Write方法将读取内容写入当前HTTP...响应输出

    1K100

    如何在 .NET代码判断当前程序运行在 Debug 下还是 Release 下

    如何在 .NET代码判断当前程序运行在 Debug 下还是 Release 下 发布于 2018-07-05 11:39...AssemblyConfiguration,直接写明了当前是 Debug 还是 Release 编译。...DisableOptimizations 禁止编译器对输出程序集进行优化,因为优化可能导致调试过程非常困难。...这可能发生在单元测试、性能测试或者其他非托管程序调用托管代码情况;虽然不是主要场景,却很常见。所以,我们依然需要处理返回 null 情况。 那么如何才能找到我们需要入口程序集呢?...在我们使用场景是取整个托管调用栈,由于这个方法本身就是托管代码,所以栈至少存在一个帧;也就是说此方法在我们场景是不可能返回 null

    1.7K10

    探寻ASP.NET MVC鲜为人知奥秘(2):与Entity Framework配合,让异步贯穿始终

    我们都知道,微软IIS服务器每个线程数量是有限,在以往ASP.NET MVC应用程序,当一个请求到达服务器,IIS从线程池中创建一个线程开始执行调用,当执行完所有的操作将请求返回,再释放线程,...所以,我们就会想需要一种异步方式来执行请求,当遇到长请求时候,将请求从IIS线程交由后台线程处理,释放当前线程,处理完成后,再从线程池中选择线程继续进行请求其它处理。...How 在ASP.NET MVC3种,已经提供了AsyncController,可以创建异步控制器,可那时候需要用到Async和Completed方法对模式来处理,而现在,我们不需要单独去实现继承自...而且,在Entity Framework6,同样实现了对数据异步查询和保存功能,这就使得我们在应用程序整个过程,都可以以异步方式处理逻辑。...Let’s  do   it 示例使用VS2013创建一个ASP.NET MVC5项目”AsyncExample“(不纠结于设计原则,注意重点) 在Models文件夹添加一个用户类: namespace

    71370

    ASP.NET MVC5高级编程——(2)MVC模式视图

    此处选择是/Views/Home/Index.cshtml。 ? 与ASP.NET MVC大部分方法一样,这一约定是可以重写。...在Controller方法,可以通过向重载View方法传递模型实例来指定模型,代码如下: 1 public ActionResult List() 2 { 3 var Musics = new...我们可以使用标准字典语法设置或读取其中值: ViewData["CurrentTime"] = DateTime.Now; 尽管这种语法现在也能用,但是MVC3提供了更简单语法,可以利用C#4dynamic...2.视图模型 先写一个新方法到HomeCOntroller控制器,Edit: public ActionResult Edit() { return...例如,在下面的这个例子中就是展示如何在一个条件语句块显示纯文本 1 @if (showMessage) 2 { 3 this is plain text 4 } 或者

    2.9K10

    Asp.Net MVC3 简单入门第一季(二)详解Asp.Net MVC3项目

    前言 在上一篇文章Asp.Net MVC3 简单入门第一季(一)环境准备我简单介绍了Asp.Net MVC3项目的安装和第一个Asp.Net MVC3项目的基本情况。...还有好多疑问,那在这篇文章我们将详细介绍项目中各个文件夹作用,并真的第一个项目我们简要介绍一下Asp.Net MVCURL驱动是怎么回事。...看下表所示就是Asp.Net MVC3各个文件夹作用。...实例,然后调用InvokeAction方法,执行Index方法,最终执行View()方法返回一个ViewResult实例,再调用自己EexcuteResult方法,将数据上下文和输出交给视图引擎...Url 路由入门 Asp.Net MVC3 简单入门第一季(一)环境准备 Asp.Net MVC3 简单入门第一季(二)详解Asp.Net MVC3项目 Asp.Net MVC3 简单入门第一季(三)

    95310

    ASP.NET MVCActionFilter是如何执行

    在ASP.NET MVC四大筛选器(Filter),ActionFilter直接应用在某个Action方法上,它在目标Action方法执行前后对调用进行拦截以执行一些额外操作。...异常处理 一、ActionFilter ActionFilter允许我们在目标Action方法执行前后对调用进行拦截以执行一些额外操作,所有的ActionFilter实现了具有如下定义接口IActionFilter...当整个ActionFilter链执行结束之后,ActionExecutedContextResult属性返回ActionResult将会作为对当前请求响应。...运行该程序后会在浏览器呈现出如左图所示输出结果,从中可以看出对于应用到Action方法Index上三个ActionFilter,当BarAttributeOnActionExecuting方法执行并对...方法抛出异常,整个ActionFilter链又会如何执行。

    1.6K70

    详解linux下.netmvccms程序结构

    cms程序架构 本程序是主要是用于企业网站开发,也可以做博客程序,程序是从之前上一篇.net 博客程序改进过来,主要技术由webform转成.net mvc了,由于是很早之前项目,12年还是mvc3...如下为一个列表界面的Action逻辑才20几行 public ActionResult Category(string pagename) { var model = new PostListModel....net mvc3在 linux下部署需要注意是需要将项目下引用dll都需要上传到bin目录下。...可以对比下我webform下Linux博客程序站点bin下只要引入Mono和Nvelocity这2个第三方dll,其他都是自己业务程序,这个.net cms要东西还挺多,下图是我博客站点下bin...linux服务器上.net 程序问题 jexus不支持中文,所以文件上传路径必须重写成字母加数字符号形式, jexus web服务器是默认对大小写敏感,所以部署时候一定要 只需要把 jws这个脚本文件

    97921

    自己动手写一个简单MVC框架(第二版)

    一、ASP.NET MVC核心机制回顾   在ASP.NET MVC,最核心的当属“路由系统”,而路由系统核心则源于一个强大System.Web.Routing.dll组件。 ?   ...换句话说,是在HtttpApplication第7个管道事件处对请求进行了拦截。 ?   ...在ASP.NET MVC,会调用MvcHandlerProcessRequest()方法,此方法会激活具体请求Controller类对象,触发Action方法,返回ActionResult实例。...(2)如果ActionResult是非ViewResult,比如JsonResult, ContentResult,这些内容将直接被输送到Response响应,显示给客户端;如果是ViewResult...在以往ASP.NET MVC开发,我们在Action方法编写,总会看到它们返回类型都是以ActionResult为基类各种Result类型。

    1.4K20

    【翻译】在没有安装ASP.NET MVC3服务器上运行ASP.NET MVC3程序-scottgu

    只要您网站托管服务提供商支持.NET 4,那么您现在就可以构建和部署ASP.NET MVC3应用程序了 - 不用托管供应商做任何事。 下面的文章介绍如何启用此功能。...你只要把ASP.NET MVC组件放在你WEB程序bin目录,然后把整个Web程序拷贝到FTP(WEB服务器)上,它就可以工作了。...: 上述错误表示, 至少有一个运行ASP.NET MVC 3所需程序集在GAC找不到。...方法2:基于\ Bin目录引用ASP.NET MVC组件 您项目可以使用另一种方法 在您Web应用程序\bin目录中分发和引用ASP.NET MVC3程序集。...相反,你只要复制你web应用程序(在bin目录包含MVC3组件)到 .NET4服务器上,它就会运行。

    4.2K10

    Razor语法

    1.开发工具   Razor是MVC3一个视图模板引擎,所以,我们只需要在VS2010安装一个MVC3工具,就可以使用Razor了。   ...2.Razor文件类型   Razor支持两种文件类型,分别是.cshtml 和.vbhtml,其中.cshtml 服务器代码使用了c#语法,.vbhtml 服务器代码使用了vb.net语法。...如果我们希望在网页输出一个变量,或者当前日期,我们可以使用如下代码: @{string productName = "台灯";} @productName...另外,如果需要输出,例如上面的在页面输出结果,我们可以使用@sum完成输出   另外,@(code)可以输出一个表达式运算结果,上面的代码我们也可以写成这样: @{ int...@* 这是一个注释 这个是注释 *@   OK,Razor基础语法就讲到这里,我将在下一篇博文中讲解如何复用Razor代码,感谢您关注,也希望这篇博文对您有所帮助

    1.1K10

    ASP.NET Core中使用IOC三部曲(三.采用替换后Autofac来实现AOP拦截)

    前言 本文主要是详解一下在ASP.NET Core,采用替换后Autofac来实现AOP拦截 觉得有帮助朋友~可以左上角点个关注,右下角点个推荐 这里就不详细赘述IOC是什么 以及DI是什么了....正文 上一篇我们讲了如何将默认容器替换为Autofac,并使用属性注入....那么这一篇我们就来讲讲如何利用Autofac实现我们AOP(面向切面编程) . 1.引用正确库来实现AOP 既然是跨平台,那么在asp.net core因为采用了.net core来作为基础库(当然...新.NET Core是基于.NET Standard..所以我们在引用库时候特别要注意相关兼容问题. 在传统ASP.NET,使用过Autofac来进行AOP操作,应该都知道这个库....方法..我们直接将拦截内容输出到调试窗(正式项目..请根据业务来操作拦截)..

    1.5K90
    领券