我试图将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); 线。
答案 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美分。
亨利