在后端使用 MVC3 .net Controller ,我正在执行 HttpPost 通过 HttpContext 提交文件。
当服务器读取文件时,会随上传结果返回一个字符串列表。
到目前为止,我已经能够实现两种方案:
1) 将字符串列表作为单个制表符分隔的字符串返回为 JsonResult
string tabSeparatedMessages = "";
foreach (string message in messageLog)
{
tabSeparatedMessages = tabSeparatedMessages + message;
if (message != messageLog[messageLog.Count - 1])
{
tabSeparatedMessages = tabSeparatedMessages + '\n';
}
}
return this.Json(new
{
success = true,
total = messageLog.Count,
data = tabSeparatedMessages
}, "text/html", JsonRequestBehavior.AllowGet);
2) 将文本文件中的字符串列表作为 ActionResult 返回
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".txt";
using (StreamWriter writer = new StreamWriter(fileName))
{
foreach (string message in messageLog)
{
writer.WriteLine(message);
}
}
return File(fileName, "text/plain", "UPLOAD_RESULTS.txt");
我的问题是我想要这些方法中的每一个的元素,但很难将这两种方法结合起来。我想要 JsonResult,以便我可以返回 bool “成功”值以在客户端上 Release模式等待消息。我想要 ActionResult,以便客户端可以简单地下载文件,而不是将字符串列表解析到 GUI 组件中。
有没有办法返回一个要下载的文本文件作为 JsonResult 的一部分,或者与 ActionResult 一起返回 Json 数据?
感谢您的阅读
最佳答案
不幸的是,您一次只能返回一种结果类型。如果我是您,并且确实需要将 upload_results.txt 下载到客户端,我的 json 结果中会有一个参数,该参数是对服务器上文件的引用。
因此,客户端首先收到上传成功的响应,然后您隐藏模式对话框,然后使用 javascript 对 upload_results.txt 文件发出另一个请求。
关于c# - 在JsonResult中返回文件还是在ActionResult中返回Json数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771066/