MVC模型以低耦合、可重用、可维护性高等众多优点已逐渐代替了WebForm模型。能够灵活使用MVC提供的扩展点可以达到事半功倍的效果,另一方面Asp.net MVC的设计和高质量的代码也值得我们去阅读和学习。
  本文将介绍Asp.net MVC中常用的八个扩展点并举例说明。
  一、ActionResult
  ActionResult代表了每个Action的返回结果。asp.net mvc提供了众多内置的ActionResult类型,如:ContentResult,ViewResult,JsonResult等,每一种类型都代表了一种服务端的Response类型。我们什么时候需要使用这个扩展点呢?
  假如客户端需要得到XML格式的数据列表:
  public void GetUser()
  {
  var user = new UserViewModel()
  {
  Name = "richie",
  Age = 20,
  Email = "abc@126.com",
  Phone = "139********",
  Address = "my address"
  };
  XmlSerializer serializer = new XmlSerializer(typeof(UserViewModel));
  Response.ContentType = "text/xml";
  serializer.Serialize(Response.Output, user);
  }
  我们可以在Controller中定义一个这样的方法,但是这个方法定义在Controller中有一点别扭,在MVC中每个Action通常都需要返回ActionResult类型,其次XML序列化这段代码完全可以重用。经过分析我们可以自定义一个XmlResult类型:
  public class XmlResult : ActionResult
  {
  private object _data;
  public XmlResult(object data)
  {
  _data = data;
  }
  public override void ExecuteResult(ControllerContext context)
  {
  var serializer = new XmlSerializer(_data.GetType());
  var response = context.HttpContext.Response;
  response.ContentType = "text/xml";
  serializer.Serialize(response.Output, _data);
  }
  }
  这时候Action可以返回这种类型了:
  public XmlResult GetUser()
  {
  var user = new UserViewModel()
  {
  Name = "richie",
  Age = 20,
  Email = "abc@126.com",
  Phone = "139********",
  Address = "my address"
  };
  return new XmlResult(user);
  }
  同样的道理,你可以定义出其他的ActionResult类型,例如:CsvResult等。