我应该如何 return 使用 ServiceStack 的大文本文件?

How should I return a large text file using ServiceStack?

我有一个 Web 服务需要 return 一个大的文本文件,以便在客户端上进行 AJAX 调用。对于初学者,我有一个有效的文本文件路径:

var fileName = <file on server>

我知道文件名是有效的,因为我可以在服务器上将其打开为 FileStream

我已经尝试了 ServiceStack and returning a stream 中推荐的一些不同方法,但我似乎无法让它发挥作用。

我应该return做什么?我最好的猜测是:

var stream = File.Open(fileName, ...);
return HttpResult(stream, "text/plain"){ AllowPartialResponse = false };

但这行不通;响应是一个简单的 JSON 对象。使用 FileInfoasAttachment 选项也不起作用;它只是return编辑了一堆文件信息。

目标是 JavaScript 客户端能够接收字符串形式的内容:

api.getFile({...}).then( function (result) {
    // result has the file contents
}); 

正确的做法是什么?

更新:

我最终使用这种流方法让它工作:

using( var fs = File.OpenRead( fileName ) )
{
    fs.CopyTo( Response.OutputStream );
}

我不完全理解为什么其他一些方法不起作用,但它们似乎与 1) FileInfo 及其在服务器上的行为有关,2) 我的开发环境中的文件权限,以及3) "partial content" 问题和异常。 File.Exists() returns false, but not in debug 讨论了一个让我失望的问题。

我刚刚 committed a Service that returns a text file 并且 HttpResult API 按预期工作:

[Route("/textfile-test")]
public class TextFileTest
{
    public bool AsAttachment { get; set; }
}

public class MyServices : Service
{
    public object Any(TextFileTest request)
    {
        return new HttpResult(new FileInfo("~/textfile.txt".MapHostAbsolutePath()), 
            asAttachment:request.AsAttachment);
    }
}

您可以使用或不使用 asAttachment 选项进行测试:

您也可以直接访问文本文件(即没有服务):

此外,different ways to return an Image response 也应该适用于文本文件。