Published on: 27 October, 2017

How to download a file using .Net Web API MVC ?

Posted by andy | 3570 views 0 likes 0 favourites 3 comments
Tumblr Digg Google Plus

In this article, you will learn how to download a file in Web API MVC. We will use HTTP Get API method to perform this download action with one single parameter which will accept the file name. Here is the full code.

//import namespaces
using System.IO;
using System.Net.Http.Headers;

public HttpResponseMessage DownloadFile(string fileName)
	if (!string.IsNullOrEmpty(fileName))
		string filePath = "/images/";
		string fullPath = AppDomain.CurrentDomain.BaseDirectory + filePath + "/" + fileName;
		if (File.Exists(fullPath))

			HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
			var fileStream = new FileStream(fullPath, FileMode.Open);
			response.Content = new StreamContent(fileStream);
			response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
			response.Content.Headers.ContentDisposition.FileName = fileName;
			return response;

	return new HttpResponseMessage(HttpStatusCode.NotFound);

So how does the code work? Basically, the API will accept a query string which is the file name. We can get the root path of our project by using the following code.


What we need to do next is to make sure if the user has passed the file name in the query string and if they are, we then check using System.IO.File to see if the file exists on the server. To test it, you can just need to call the API path in your HTML code. See example below and change the API path accordingly as this is just an example only.

<a href='/APIPath/DownloadFile?fileName=ImageName.jpg'>Download file</a>
Commented on: 18 Jan, 2018 01:25:34 AM
You gotta swap these two lines: response.Content.Headers.ContentDisposition.FileName = fileName; response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); Initialize content disposition first and then set file name.
Commented on: 18 Jan, 2018 11:27:00 PM
Hi Anurag, Thanks for correcting the codes. I have updated as advised.
Commented on: 05 Apr, 2018 10:58:09 PM
Very good tutorial. It works with very efficiently written code. Thank you very much for this!
Write Comment
0 characters entered. Maximum characters allowed are 1000 characters.
Share your article with us and add your own google adsense account to earn extra money. Plus, you can promote a link back to your site.
Related Articles
Published on: 21 March, 2018
In this tutorial you will learn how to create your own custom identity authentication and authorization with ASP.Net MVC without using Entity Framework. By default, the example given in the MVC official tutorial site is using Entity Framework. So if you do not want to use Entity Framework and want to use external data source or your own database, you may want to read the following article I wrote on how to integrate your existing login details.
Published on: 01 March, 2018

If you want to enable routing in C# MVC, you have to do the following steps. Note: this only applies to MVC version 5 or above. Open your RouteConfig.cs file under App_Start folder in your MVC root project.

Published on: 28 October, 2016

In this tutorial you will learn how easily you can implement a simple checkout express using C# MVC Web API. We will create a really simple shopping cart where customers can add and delete their cart items before proceed to payment.