【问题标题】:does HTTPResponse Response exist in .NET Core 3.1.NET Core 3.1 中是否存在 HTTPResponse 响应
【发布时间】:2021-01-16 21:52:55
【问题描述】:

我正在尝试将数据从 asp.net 核心 web 应用程序 (Blazor) 导出到 excel 文件。 Excel 文件必须显示在浏览器中,供用户下载。

根据我使用的所有示例响应:

using System;
using System.IO;
using ClosedXML.Excel;
using System.Data;
using System.Web;
using Microsoft.AspNetCore.Http;

namespace Sxxx
{
    public class Exporter
    {
        public void Export()
        {
            using (IXLWorkbook wb = new XLWorkbook())
            {
                IXLWorksheet ws = wb.Worksheets.Add("Sample Sheet");

                ws.Cell(1, 1).Value = "Hello World!";

                Response.Clear();
                Response.Buffer = true;
                Response.Charset = "";
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment;filename=SqlExport.xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(Response.OutputStream);
                    Response.Flush();
                    Response.End();
                }
            }
                       
        }
    }

但是无法识别响应。 VS 2019 显示的缺失程序集是“Ubiety.Dns.Core”,但这似乎不对。

在 docs.microsoft.com 中,HTTPresponse 仅显示为 Framework 4.8 的一部分,所以我的问题是:我可以在这里使用 Response 还是需要其他东西用于 Core 3.1 项目?

提前致谢

【问题讨论】:

  • 什么是Response?据我所知,您不会在代码中的任何地方实例化它。您是否尝试创建 HttpResponseMessage ?
  • 在这样的 .NET 项目中,您根本无法免费获得Response!您可能会在继承自 Controller 的类中获得它(不确定在 Core 中是否如此)。
  • 请提供一个最小可重现的例子
  • @ADBF 你总是可以创建一个控制器,返回一个 FileResult 并以这种方式解决它。

标签: c# asp.net-core blazor


【解决方案1】:

我确实按照 Marco 和 Noah 的建议创建了一个控制器,非常感谢。我确实学到了很多……响应继承自 ControllerBase。网络上的大多数示例都是针对 .Net Framework 4.8 的,因此为 core 3.1 做这件事有点令人费解,但在这里。欢迎提出改进建议。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using ClosedXML.Excel;


namespace Sxxx.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class DownLoadController : ControllerBase
    {
        private readonly IWebHostEnvironment environment;
        public DownLoadController(IWebHostEnvironment environment)
        {
            this.environment = environment;
        }

        [HttpGet("[action]")]
        public async Task DownLoadFile()    
        {
            IXLWorkbook wb = new XLWorkbook();
            IXLWorksheet ws = wb.Worksheets.Add("Sample Sheet");
            ws.Cell(1, 1).Value = "Hello World!";
            MemoryStream ms = new MemoryStream();
            wb.SaveAs(ms);
            byte[] result = ms.ToArray();

            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.Headers.Add("Content-Disposition", "attachment; filename=somefile.xlsx");
            
            await Response.Body.WriteAsync(result);
            await Response.StartAsync();
                  
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2020-11-15
    • 2017-11-23
    • 1970-01-01
    • 2021-11-06
    • 2020-10-28
    相关资源
    最近更新 更多