MVC json结果从内存流json文件

本文关键字:json 文件 内存 结果 MVC | 更新日期: 2023-09-27 18:11:20

提前致谢

我需要一个MVC控制器(=GetFreqSuggestions),返回一个JsonResult来提供预取Typeahead javascript函数。

$(function() {
    var bestPictures = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        prefetch:{
            url: '../Reports/GetFreqSuggestions',
            ttl:0
        },
        remote: '../Reports/ToDo?q=%QUERY'
 });
 bestPictures.initialize();
 $('#remote .typeahead').typeahead({
         hint: true,
         highlight: true,
     },
     {
         name: 'best-pictures',
         displayKey: 'value',
         source: bestPictures.ttAdapter()
     });
});

Json文件从azure blob存储获得,作为memorystream:

public async Task<bool> DownloadStreamFromBlobAsync(MemoryStream memStr, string blobContainerName, string blobName, ILogger log)
{
    Stopwatch timespan = Stopwatch.StartNew();
    try
    {
        CloudBlobContainer container = GetCloudBlob(blobContainerName);
        if (container != null & memStr!=null)
        {                   
             CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
             await blockBlob.DownloadToStreamAsync(memStr);
        }
    }
    catch (Exception e)
    {
        log.Error(.....);
        return false;
    }
    timespan.Stop();
    log.TraceApi(.......);
    return true;
}

在控制器中,我想将包含先前上传的json文件的内存流转换为json结果。

 public async Task<JsonResult> GetFreqSuggestions()
 {
     MemoryStream mem = await _suggestoinProvider.DownloadFrequentSuggestionsAsync();
     if(mem != null)
     {
         return ????
     }
     return null;
 }

欢迎提出任何建议。(我已经测试了return Json(data, JsonRequestBehavior.AllowGet);,当数据不是流时,它可以完美地工作)我不喜欢先在服务器上保存Json文件。

MVC json结果从内存流json文件

我认为.ToArray().ReadToEnd()都可以做到这一点:

return Json(mem.ToArray(), JsonRequestBehavior.AllowGet);

return Json(mem.ReadToEnd(), JsonRequestBehavior.AllowGet);