玩转Asp.net MVC 的八个扩展点

发表于:2016-3-24 09:51

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:richiezhang    来源:51Testing软件测试网采编

  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等。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号