1 2 下一页 在ASP.net MVC的controller中大部分方法返回的都是ActionResult,更确切的是ViewResult。它返回了一个View,一般情况下是一个HTML页面。但是在某些情况下我们可能并不需要返回一个View,我们可能需要的是一个字符串,一个json或XML格式的文本,一个图片。 ActionResult是一个抽象类,我们平时比较常用的ViewResult是它的派生类,所以我们也可以写一个StringResult、 XMLResult、ImageResult来实现上面提到的需求。由于返回字符串可以有更简单的方法,直接将需要返回字符串的方法的返回值设置成 string型就可以了,JsonResult在ASP.NET MVC中已经有提供。所以下面只演示XmlResult和ImageResult。 ASP.NET MVC项目是开源的(可以在http://www.codeplex.com/aspnet下载源代码),所以我们可以参考其中ViewResult和 JsonResult的代码进行改写。主要的思路是设置返回数据流HTTP Header中的Content-Type,然后将要返回的内容写入Response中。 先演示XmlResult XmlResult的代码: 1 public class XmlResult:ActionResult 2 { 3 // 可被序列化的内容 4 object Data { get; set; } 5 6 // Data的类型 7 Type DataType { get; set; } 8 9 // 构造器 10 public XmlResult(object data,Type type) 11 { 12 Data = data; 13 DataType = type; 14 } 15 16 // 主要是重写这个方法 17 public override void ExecuteResult(ControllerContext context) 18 { 19 if (context == null) 20 { 21 throw new ArgumentNullException("context"); 22 } 23 24 HttpResponseBase response = context.HttpContext.Response; 25 26 // 设置 HTTP Header 的 ContentType 27 response.ContentType = "text/xml"; 28 29 if (Data != null) 30 { 31 // 序列化 Data 并写入 Response 32 XmlSerializer serializer = new XmlSerializer(DataType); 33 MemoryStream ms = new MemoryStream(); 34 serializer.Serialize(ms,Data); 35 response.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray())); 36 } 37 } 38 }
(责任编辑:admin) |