在JsonResult中返回文件或在ActionResult中返回Json数据?

时间:2012-03-19 13:27:40

标签: c# .net json http-post jsonresult

在后端使用MVC3 .net控制器,我正在执行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,以便我可以返回一个布尔“成功”值来释放客户端上的模态等待消息。我想要ActionResult,以便客户端可以简单地下载文件,而不是将字符串列表解析为GUI组件。

有没有办法返回要作为JsonResult的一部分下载的文本文件或使用ActionResult返回Json数据?

感谢您阅读

2 个答案:

答案 0 :(得分:2)

不幸的是,您一次只能返回一种结果类型。如果我是你,我真的需要将upload_results.txt下载到客户端,我的json结果中会有一个参数,它是对服务器上文件的引用。

因此客户端首先得到上传成功的响应,然后隐藏模态对话框,然后使用javascript再次发出upload_results.txt文件请求。

答案 1 :(得分:0)

我同意上述内容,发送JSON并将文件临时存储在网络服务器上。在JSON中获得此文件的路径,然后只需执行GET