C#创建xls或csv文件并创建下载文件的链接

C#创建xls或csv文件并创建下载文件的链接,c#,.net,excel,csv,download,C#,.net,Excel,Csv,Download,我现在有这样一个场景: 我在SQL Server中有一个表,以及一些网页用户定义的查询,这些查询生成一个显示结果的结果页面。控制器功能都已准备好使用 现在我想能够下载结果到本地计算机访问该网站。我还不确定该把结果放在什么地方。我已经搜索过了,xls和csv文件看起来都很简单。但他们只创建一个文件,然后将其保存到服务器端 因此,我的问题是: 是否必须通过创建临时文件==>将临时文件下载到客户端==>删除服务器上的临时文件来完成任务 如果必须这样做,我如何创建一个按钮来下载该临时文件?如果它同时为多

我现在有这样一个场景:

我在SQL Server中有一个表,以及一些网页用户定义的查询,这些查询生成一个显示结果的结果页面。控制器功能都已准备好使用

现在我想能够下载结果到本地计算机访问该网站。我还不确定该把结果放在什么地方。我已经搜索过了,xls和csv文件看起来都很简单。但他们只创建一个文件,然后将其保存到服务器端

因此,我的问题是:

  • 是否必须通过创建临时文件==>将临时文件下载到客户端==>删除服务器上的临时文件来完成任务

  • 如果必须这样做,我如何创建一个按钮来下载该临时文件?如果它同时为多个用户服务,会发生什么


  • 不确定现在要做什么,如果有任何帮助,我们将不胜感激。

    您应该使用从Sql Server接收的数据创建一个MemoryStream。使用下面的代码创建一个新类

    public abstract class FileActionResult : IHttpActionResult
        {
            private string MediaType { get; }
            private string FileName { get; }
            private Stream Data { get; }
    
            protected FileActionResult(Stream data, string fileName, string mediaType)
            {
                Data = data;
                FileName = fileName;
                MediaType = mediaType;
            }
    
            public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
            {
                Data.Position = 0;
                var response = new HttpResponseMessage
                {
                    Content = new StreamContent(Data)
                };
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                response.Content.Headers.ContentType = new MediaTypeHeaderValue(MediaType);
                response.Content.Headers.ContentDisposition.FileName = FileName;
                response.Content.Headers.ContentLength = Data.Length;
    
                return Task.FromResult(response);
            }
    
        }
    
        public class ExcelFileActionResult : FileActionResult
        {
            public ExcelFileActionResult(Stream data) : base(data, "Exported.xls", "application/vnd.ms-excel")
            {
            }
        }
    
    流就是记忆流

       return new ExcelFileActionResult(stream);