将ASP .NET MVC ActionResult渲染为字符串

时间:2015-09-21 19:47:06

标签: c# asp.net-mvc

我试图将FileContentResult(我的情况下为.png文件)渲染为base64字符串,以将它们返回到json中。

我从这里找到了一个有趣的方法:http://approache.com/blog/render-any-aspnet-mvc-actionresult-to/,据说可以做我需要的,但当我尝试做类似的事情时

public async ActionResult GetUsers()
{    
        ...
        var query = from user in otherUsers
                    join file in allFiles on user.Profile.Id equals file.Profile.Id into usersWithFiles
                    from userWithFile in usersWithFiles.DefaultIfEmpty(new File(){Content = new byte[0], ContentType = "image/png"})
                    select new UserFriendModel { Id = user.Id, UserName = user.UserName, ProfileId = user.Profile.Id, File = File(userWithFile.Content, userWithFile.ContentType).Capture(ControllerContext) };

        return Json(query.ToList(), JsonRequestBehavior.AllowGet);
}

我正在

  

System.Web.HttpException:"自定义时,OutputStream不可用   使用TextWriter"抛出result.ExecuteResult(controllerContext);   线。

1 个答案:

答案 0 :(得分:0)

您可以在单独的查询中获取文件(png图像),使用文本编写器将数据转换为文本格式,然后将其注入数据模型。

这样的一些psudo代码:

var file = GetFileQuery();
var fileString = TextWriter.Convert(file);
var query = from user in otherUsers
    join file in allFiles on user.Profile.Id equals file.Profile.Id into usersWithFiles
    from userWithFile in usersWithFiles.DefaultIfEmpty(new File(){Content = new byte[0], ContentType = "image/png"})
    select new UserFriendModel { Id = user.Id, UserName = user.UserName, ProfileId = user.Profile.Id, File = fileString };

另一种方法是使用2个不同的操作来处理请求。第一个操作返回数据模型的所有常规数据,第二个操作仅返回图像。这样,您可以更灵活地使用图像格式,即可以在OutputStream中将其作为PNG图像返回(无需显式序列化/反序列化)。

这是我的2美分。

亨利