在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的代码:
在controller中调用它
显示出来的结果 下面演示的是ImageResult ImageResult的代码 在controller中调用 结果图
2 {
3 // 图片
4 public Image imageData;
5
6 // 构造器
7 public ImageResult(Image image)
8 {
9 imageData = image;
10 }
11
12 // 主要需要重写的方法
13 public override void ExecuteResult(ControllerContext context)
14 {
15 if (context == null)
16 {
17 throw new ArgumentNullException("context");
18 }
19
20 HttpResponseBase response = context.HttpContext.Response;
21
22 // 设置 HTTP Header
23 response.ContentType = "image/jpeg";
24
25 // 将图片数据写入Response
26 imageData.Save(context.HttpContext.Response.OutputStream, ImageFormat.Jpeg);
27 }
28 }
2 {
3 // 获取空间顶部的banner图片
4 WebRequest req = WebRequest.Create("http://space.cnblogs.com/images/a4/banner.jpg");
5 WebResponse res = req.GetResponse();
6 Stream resStream = res.GetResponseStream();
7 Image img = Image.FromStream(resStream);
8
9 // 输出给客户端
10 ImageResult r = new ImageResult(img);
11 return r;
12 }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-608501/ ,如需转载,请注明出处,否则将追究法律责任。