baixar arquivo usando angularJS e asp.net mvc

Eu sou um iniciante no desenvolvimento usando o asp.net mvc. Estou tentando baixar arquivos (imagens, pdf ..) Aqui está o meu código

no controlador asp

[HttpPost] public HttpResponseMessage Download(int id) { var db = new TutorialGEDEntities(); Tutorial fileToDownload = db.Tutorials.Find(id); string name = fileToDownload.filepath; Debug.WriteLine("filepath " + name); try { if (!string.IsNullOrEmpty(name)) { //var root = System.Web.HttpContext.Current.Server.MapPath(name); var filePath = System.Web.HttpContext.Current.Server.MapPath(name); ; char[] s = new char[name.Length - name.LastIndexOf("\\") - 1]; name.CopyTo(name.LastIndexOf("\\")+1, s, 0, name.Length - name.LastIndexOf("\\")-1); String fileName = new String(s); using (MemoryStream ms = new MemoryStream()) { using (FileStream file = new FileStream(name, FileMode.Open, FileAccess.Read)) { Debug.WriteLine("file " + file.Length); byte[] bytes = new byte[file.Length]; file.Read(bytes, 0, (int)file.Length); ms.Write(bytes, 0, (int)file.Length); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); ByteArrayContent content = new ByteArrayContent(bytes.ToArray()); httpResponseMessage.Content = content; httpResponseMessage.Content.Headers.Add("x-filename", fileName); httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName; httpResponseMessage.StatusCode = HttpStatusCode.OK; return httpResponseMessage; } } } return null; } catch (Exception ex) { Debug.WriteLine(ex.Data); return null; } } 

e no controlador angular

  $http({ method: 'POST', url: 'Download', data: { 'name': file.filepath }, responseType: 'arraybuffer' }).success(function (content, status, headers) { headers = headers(); console.log(content); console.log(status) var filename = headers['x-filename']; var contentType = headers['content-type']; var linkElement = document.createElement('a'); try { var blob = new Blob([content], { type: contentType }); console.log(blob); var url = URL.createObjectURL(blob); console.log(url) linkElement.setAttribute('href', url); linkElement.setAttribute("download", filename); var clickEvent = new MouseEvent("click", { "view": window, "bubbles": true, "cancelable": false }); linkElement.dispatchEvent(clickEvent); } catch (ex) { console.log(ex); } }).error(function (data) { console.log(data); }); }; 

O problema é que eu recebo um arquivo indefinido e vazio. Eu depurei o código que funciona bem, os dados do controlador asp estão bem estruturados no HttpResponse.

O que posso fazer para que isso funcione? Quaisquer outras sugestões para obter o download para funcionar são bem-vindas.

Editar:

Eu mudei a function de download no controlador asp.net. Eu usei a class HttpResponseMessage. Na solução, usei a class Response.

o controlador asp é agora:

  [HttpPost] public void Download(String name) { Debug.WriteLine("filepath " + name); if (!string.IsNullOrEmpty(name)) { char[] s = new char[name.Length - name.LastIndexOf("\\") - 1]; name.CopyTo(name.LastIndexOf("\\")+1, s, 0, name.Length - name.LastIndexOf("\\")-1); String fileName = new String(s); //var filePath = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/") + fileName; Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", fileName); Response.AppendHeader("X-FileName", fileName); Response.TransmitFile(name); Response.End(); } }