在ASP.NET MVC的controller中大部分方法返回的都是ActionResult。但是在某些情况下我们可能需要的是一个字符串,一个xml格式的文本,一个图片,json格式ASP.NET MVC已经提供了。
在Controller中调用:
在Controller中调用
原文地址: http://www.wenotebook.com/Article/Index?articleID=20141223113327
ActionResult是一个抽象类,所以我们也可以写一个XmlResult、ImageResult来实现上面提到的需求。主要的思路是设置返回数据流HTTP Header中的Content-Type,然后将要返回的内容写入Response中。源码如下:
public class XmlResult : ActionResult
{
// 可被序列化的内容
object Data { get; set; }
// Data的类型
Type DataType { get; set; }
// 构造器
public XmlResult(object data, Type type)
{
Data = data;
DataType = type;
}
// 主要是重写这个方法
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
// 设置 HTTP Header 的 ContentType
response.ContentType = "text/xml";
if (Data != null)
{
// 序列化 Data 并写入 Response
XmlSerializer serializer = new XmlSerializer(DataType);
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, Data);
response.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
}
}
}
在Controller中调用:
public ActionResult RSS()
{
RSS r = new RSS();
XmlDocument domDoc = r.WriteRSS();
Image i = Image.FromFile(@"C:\Users\Administrator\Pictures\20141024122616.png");
// 序列化为XML格式显示
XmlResult xResult = new XmlResult(domDoc, domDoc.GetType());
return xResult;
}
二、返回Image
返回Image也差不多:
public class ImageResult : ActionResult
{
// 图片
public Image imageData;
// 构造器
public ImageResult(Image image)
{
imageData = image;
}
// 主要需要重写的方法
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
// 设置 HTTP Header
response.ContentType = "image/jpeg";
// 将图片数据写入Response
imageData.Save(context.HttpContext.Response.OutputStream, ImageFormat.Jpeg);
}
}
在Controller中调用
public ActionResult Verify()
{
Image img = Image.FromFile(@"C:\Users\Administrator\Pictures\20141024122616.png");
// 输出
ImageResult v = new ImageResult(img);
return v;
}
原文地址: http://www.wenotebook.com/Article/Index?articleID=20141223113327