繁体   English   中英

asp.net核心下载excel文件和消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM