2015-09-21 76 views
2

我想呈現FileContentResult(.png文件在我的情況)成base64字符串將它們返回到json。呈現ASP .NET MVC ActionResult字符串

我發現一個有趣的方法從這裏開始: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:「使用自定義的 TextWriter時,OutputStream不可用」thrown at result.ExecuteResult(controllerContext); 一行。

回答

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種不同的動作來處理請求。第一個操作返回數據模型的所有正常數據,第二個操作僅返回圖像。通過這種方式,您可以更靈活地使用圖像格式,也就是說,您可以將它作爲PNG圖像(無需顯式序列化/反序列化)以OutputStream形式返回。

這是我的2美分。

亨利