gpt4 book ai didi

c# - 返回 Web 窗体中等效的文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:24 25 4
gpt4 key购买 nike

我的 MVC C# 应用程序中有以下代码:

      return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "PSL.xlsx"); 

从流中返回 PSL 文件。我正在尝试在我的 Web 窗体代码中做同样的事情:

            Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=PSL.xlsx");
Response.BinaryWrite(stream.ToArray());
// myMemoryStream.WriteTo(Response.OutputStream); //works too
Response.Flush();
Response.Close();
Response.End();

想知道这是否是正确的方法,因为我收到以下错误消息:

  Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}

最佳答案

该错误是由调用 Response.End(); 时抛出的 ThreadAbortException 引起的。看看这个 question .

基于您有 Response.End(); 调用这一事实,我假设您包含的代码正在 ASPX 页面的事件中运行。正确吗?

如果是这样,我建议您将加载文件的代码移到ASPX 页面并将其提供给客户端,移到通用处理程序 中。通用处理程序具有 ASHX 文件扩展名。它非常简单——它只有一种方法和一个您需要实现的属性。最主要的是 ProcessRequest 方法。来自名为 ServeFile.ashx 的处理程序的示例:

public class ServeFile : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
byte[] fileBytes = File.ReadAllBytes("c:\\path\\to\\folder\\with\\files\\" + context.Request.QueryString["fileName"]);
context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
context.Response.AddHeader("Content-Disposition", "attachment; filename=PSL.xlsx");
context.Response.BinaryWrite(fileBytes);
}

public bool IsReusable
{
get
{
return false;
}
}
}

构建处理程序后,您可以更改 aspx 页面以显示指向处理程序的链接,该链接在 QueryString 中具有合适的标识符,处理程序用于加载和提供正确的文件。在示例中,文件是从文件系统中读取的,但您当然可以从数据库中加载它,也可以通过其他方式获取它。

关于c# - 返回 Web 窗体中等效的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com