ASP.NET Minimal API How to Return/Download Files from URL

Viewed 3273

I'm working on minimal api, what I'm trying is when the user visits /download it immediately downloads my picture named add.png.

But no matter what I try it doesn't work because I either get an empty page with only {}

Is this possible? if so how

This is my code that I've tried so far. (I got access denied with all permissions on the location!)

app.MapGet("/download", async () =>
  {
      var path = "add.png";
      using (var stream = new FileStream(path, FileMode.Open))
      {
          stream.CopyToAsync(stream);
      }
      var ext = Path.GetExtension(path).ToLowerInvariant();
      var result = (ext, Path.GetFileName(path));
      return result;
  });

How do I do this for when the user does /download within my api that he is going to download a file?

Thanks in advance

2 Answers

You can use Results.File to return file to download from your Minimal APIs handler:

app.MapGet("/download", () =>
{
    var mimeType = "image/png";
    var path = @"path_to_png.png";
    return Results.File(path, contentType: mimeType);
});

For some reason the accepted answer did not work for me. Maybe because I am downloading a zip file... Here's what ended up working for me...

        app.MapGet("download/{fileName}", async (string fileName) => 
        {
            var mimeType = "application/zip";
            var path = @$"{fileName}.zip";
            
            var bytes = await File.ReadAllBytesAsync(path);

            return Results.File(bytes, mimeType, $"{fileName}.zip");

        })
            .Produces(StatusCodes.Status200OK)
            .Produces(StatusCodes.Status404NotFound)
            .WithName($"GET {EndpointCategory} by Name")
            .WithTags(Tag);
Related