定义在Controller中的Action方法大都返回一个ActionResult对象。ActionResult是对Action执行结果的封装,用于最终对请求进行响应。ASP.NET MVC提供了一系列的ActionResult,它们本质上是通过怎样的方式来响应请求的呢?这是这个系列着重讨论的主题。[本文已经同步到《How ASP.NET MVC Works?》中]
目录
一、ActionResult对请求的响应
二、EmptyResult
三、ContentResult
四、实例演示:执行返回类型为非ActionResult的Action方法得到的ActionResult对象
五、实例演示:通过ContentResult实现主题定制
HTTP是一个单纯的采用请求/回复消息交换模式的网络协议,Web服务器在接收并处理来自客户端的请求后会根据处理结果对请求予以响应。对于来自客户端的访问请求,最终的处理体现在针对目标Action方法的执行,我们可以在定义Action方法的时候人为地控制对请求的响应。如果下面的代码片断所示,抽象类Controller具有一个只读的Response属性表示当前的HttpResponse,我们可以直接利用它来实现对请求的响应。我们也可以间接地通过表示当前HTTP上下文的HttpContext属性和表示Controller上下文的ControllerContext属性来获取用于响应请求的HttpResponse对象。
class Controller : ControllerBase, ...
2: {
//其他成员
public HttpResponseBase Response { get; }
public HttpContextBase HttpContext { get; }
6: }
7:
class ControllerBase : IController
9: {
//其他成员
public ControllerContext ControllerContext { get; set; }
12: }