ASP.NET MVC返回XML、Image,派生ActionResult

在ASP.NET MVC的controller中大部分方法返回的都是ActionResult。但是在某些情况下我们可能需要的是一个字符串,一个xml格式的文本,一个图片,json格式ASP.NET MVC已经提供了。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值