.NET Core WebAPI-允许用户下载文件

时间:2019-05-23 10:01:52

标签: c# asp.net asp.net-core

我想要做的是,当Web客户端调用端点时,浏览器然后下载文件。基本上,只有下载文件功能。我将如何实现?

在我的API控制器上,我尝试了这2个功能,但没有一个提示浏览器下载文件。我在Swagger上测试了它们。

    [HttpGet]
    public ActionResult Download()
    {
        var path = @"C:\Users\farid\Desktop";
        return PhysicalFile(path, "text/plain", "Test.txt");
    }

    [HttpGet]
    public IActionResult GetBlobDownload()
    {
        var content = new FileStream(
            @"C:\Users\farid\Desktop\Test.txt",
            FileMode.Open,
            FileAccess.Read,
            FileShare.Read);
        var contentType = "text/plain";
        var fileName = "testfile.txt";
        return File(content, contentType, fileName);
    }

或者这仅在使用API​​时不起作用?我需要使用客户端应用程序对此进行测试吗?该Web应用程序位于ASP.NET MVC上。

如果有任何教程允许用户下载.NET Core中的文件,请给我。我已经用Google搜索了一些,但都没有用(或者我的理解是完全错误的。)

1 个答案:

答案 0 :(得分:0)

请明确一点,因为您没有提到您正在从前端进行的呼叫

我假设您正在执行“表单发布”。由于javascript的限制,您无法发送ajax请求来下载文件。

这里是下载文件的代码。

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.PlatformAbstractions;
using System.IO;

namespace DeafultAPICoreProject.Controllers
{
    [Route("api/values")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [Route("download")]
        public IActionResult DownloadFile()
        {
            var filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, $"TextFile.txt");

            var bytes = System.IO.File.ReadAllBytes(filePath);

            return File(bytes, "application/octet-stream", "newfile.txt");

        }
    }
}

How to download file in asp.net core