Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在JsonResult中返回文件还是在ActionResult中返回Json数据?_C#_.net_Json_Http Post_Jsonresult - Fatal编程技术网

C# 在JsonResult中返回文件还是在ActionResult中返回Json数据?

C# 在JsonResult中返回文件还是在ActionResult中返回Json数据?,c#,.net,json,http-post,jsonresult,C#,.net,Json,Http Post,Jsonresult,在后端使用MVC3.net控制器,我正在执行一个HttpPost,以通过HttpContext提交一个文件 当服务器读取文件时,将返回一个字符串列表以及上载结果 到目前为止,我已经能够实现两种方案: 1) 以单个制表符分隔的字符串作为JsonResult返回字符串列表 string tabSeparatedMessages = ""; foreach (string message in messageLog) { tabSeparatedMessages = tabSeparated

在后端使用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,这样我就可以返回一个布尔“success”值,以便在客户机上发布一条等待消息。我想要ActionResult,这样客户端就可以简单地下载一个文件,而不是将字符串列表解析到GUI组件中

是否有方法返回要下载的文本文件作为JsonResult的一部分,或者使用ActionResult返回Json数据


感谢您阅读

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


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

我同意上面的说法,发送JSON并将文件临时存储在Web服务器上。在JSON中有这个文件的路径,然后只做一个GET

我的理解是MVC3控制器在每次请求后都被解构。您或其他人对如何在文件生成请求和下载请求之间保持用户到文件的关系有何建议?我正在考虑将临时文件路径与生成它的用户一起存储在数据库中,但是一个用户仍然可以有多个与其关联的文件,我不知道如何确保下载的文件来自正确的请求。请使用发送到客户端并用于调用文件的GUID密钥将文件存储在Web服务器的缓存中。如果服务器上作为缓存项的剩余文件可以设置为在5分钟内消失,或者您认为合适的,那么这就解决了问题。GUID键是您希望在json响应中发送的键,然后在缓存中请求使用该GUID标记的文件,或者如果您更喜欢数据库,请发送该键。谢谢大家。我真的很感激。