首页
学习
活动
专区
工具
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方法,为它添加一个名为name的string类型参数,修改后的代码如下: 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 。

    50310

    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.7K51

    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方法定义可以看出,它只是调用当前HttpResponse的OutputStream属性的Write方法直接将表示文件内容的字节数组写入响应输出流...在实现的WriteFile方法中,FileStreamResult通过指定的文件流读取文件内容,并最终调用当前HttpResponse的OutputStream属性的Write方法将读取的内容写入当前HTTP...响应的输出流中。

    1.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

    71570

    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#4的dynamic...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 MVC的URL驱动的是怎么回事。...看下表所示的就是Asp.Net MVC3中各个文件夹的作用。...的实例,然后调用InvokeAction方法,执行Index的方法,最终执行View()方法返回一个ViewResult实例,再调用自己的EexcuteResult方法,将数据上下文和输出流交给视图引擎...Url 路由入门 Asp.Net MVC3 简单入门第一季(一)环境准备 Asp.Net MVC3 简单入门第一季(二)详解Asp.Net MVC3项目 Asp.Net MVC3 简单入门第一季(三)

    96410

    ASP.NET MVC中的ActionFilter是如何执行的?

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

    1.6K70

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

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

    1.4K20

    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 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

    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.6K90
    领券