在.net Core 3.1中是否存在HTTPResponse Response ?



我试图从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();

}
}
}

相关内容

最新更新