[英]asp.net core download excel file and messages
我需要调用操作结果来生成并下载Excel文件,但是如果出现问题,我想显示一条消息。 这是ASP.NET Core 2
生成部分不是问题,也不是下载问题,但是我确实对如何调用该操作以及出现错误时显示消息有疑问。
要下载文件,我通常会这样做:
[HttpGet]
public IActionResult MyFileDownload(int id)
{
if (id == 0) MESSAGE;
var filePath = GenerateAndSaveExcel(id);
if (string.IsNullOrEmpty(filePath)) MESSAGE;
using (var webClient = new System.Net.WebClient())
{
return File(new MemoryStream(webClient.DownloadData(filePath)), "application/pdf", "myfile.xlsx");
}
}
GenerateAndSaveExcel函数仅使用ClosedXml创建一个新的Excel文件(如果有人感兴趣,我可以分享我的工作)并返回新文件的路径。
我这样调用该函数:
<a asp-action="MyFileDownload" asp-controller="myController">download</a>
但是我想更改调用函数的方式,因为如果id = 0或在generate函数中出现问题,我想发送消息,通常我使用son并使用javascript进行显示。
它可能是如此简单,但我看不出这样做的方法。 也许Ajax调用可以解决该问题,但是我不知道如何管理下载。
另一件事是,我喜欢这种方式的下载,因此文件直接转到下载文件夹。
谢谢。
请注意,您的操作方法返回的IActionResult
只是表示操作结果的接口。 执行结果对象时, IActionResult
将调用结果对象的以下方法并写入响应。
Task ExecuteResultAsync(ActionContext context);
您代码中的File()
只是一个返回FileStreamResult
的帮助程序方法,该方法是IActionResult
的实现。
因此,只需返回IActionResult
的实例IActionResult
:
if (id == 0) return new ContentResult(){
Content="not a valid id",
// ContentType="application/plaintext",
};
var filePath = GenerateAndSaveExcel(id);
if (string.IsNullOrEmpty(filePath)) return new ContentResult(){
Content="foo bar",
// ContentType="application/plaintext",
};
using (var webClient = new System.Net.WebClient())
{
return File(new MemoryStream(webClient.DownloadData(filePath)), "application/pdf", "myfile.xlsx");
}
如果您想返回json结果,只需返回一个
new JsonResult(new {
foo="Foo",
bar="Bar"
})
或者,如果您想让它在默认情况下处理404页面:
返回新的StatusCodeResult(404);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.