我的控制器中有此方法。
public IActionResult Download()
{
return Json(_context.Users);
}
我注意到它会生成正确的JSON结构,但是它在浏览器中呈现为普通文本。我希望将其下载到客户端计算机。我该怎么办?
我不确定是否应该使我的对象以某种方式流式传输like this,或者是否应该在我的硬盘驱动器上创建文件并将其提供给like this。
我找不到像我们在C#中惯用的那样简单直接的东西。因此,我担心这里缺少一个概念。
答案 0 :(得分:1)
将数据转换为字节,然后将这些字节转换为FileResult。返回FileResult后,浏览器将在显示“文件”时执行其通常的操作,通常会提示用户或下载。
以下示例:
public ActionResult TESTSAVE()
{
var data = "YourDataHere";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
var output = new FileContentResult(bytes, "application/octet-stream");
output.FileDownloadName = "download.txt";
return output;
}
在这种情况下,您只需将JSON数据作为字符串即可。
答案 1 :(得分:1)
您可以只将json对象写入流或数组,并使用File
方法重载之一。添加方便的Serialize
方法
private byte[] Serialize(object value, JsonSerializerSettings jsonSerializerSettings)
{
var result = JsonConvert.SerializeObject(value, jsonSerializerSettings);
return Encoding.UTF8.GetBytes(result);
}
并按以下方式使用
public IActionResult Download()
{
var download = Serialize(_context.Users, new JsonSerializerSettings());
return File(download , "application/json", "file.json");
}
如果您使用Startup
在.AddJsonOptions()
中设置特殊的json序列化程序设置,则您希望将其用作ASP.NET
框架,并在Json
方法中使用它们。将MvcJsonOptions
注入控制器
IOptions<MvcJsonOptions> _options;
public YourController(IOptions<MvcJsonOptions> options)
{
_options = options;
}
并将设置传递给方法
public IActionResult Download()
{
var download = Serialize(_context.Users, _options.Value.SerializerSettings);
return File(download , "application/json", "file.json");
}