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文件。
我认为.ToArray()
或.ReadToEnd()
都可以做到这一点:
return Json(mem.ToArray(), JsonRequestBehavior.AllowGet);
或
return Json(mem.ReadToEnd(), JsonRequestBehavior.AllowGet);