我试图从asp.net核心web应用程序(Blazor)导出数据到excel文件。Excel文件必须显示在浏览器中,供用户下载。
根据所有的例子,我使用Response:
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显示的缺失程序集是" ubiity . dns . core ",但这似乎不正确。
在learn.microsoft.com HTTPresponse只显示为框架4.8的一部分,所以我的问题:我可以在这里使用响应,还是我需要一个Core 3.1项目的其他东西?
Thanks in advance
我确实按照Marco和Noah的建议创建了一个控制器,非常感谢。我确实学到了很多……Response继承自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();
}
}
}