Problema de download de arquivo com o controlador da API
public class DefaultController : Controller
{
// GET: Default
public ActionResult Index()
{
return Download();
}
public FileResult Download()
{
string xmlString = "my test xml data";
string fileName = "test" + ".xml";
return File(Encoding.UTF8.GetBytes(xmlString), "application/xml", fileName);
}
}
Eu tenho o código acima no aplicativo asp.net mvc para baixar um arquivo. Funcionou bem, pois meu controlador é herdado do Controller. Mas quando eu movo esse código para o controlador Webapi, ele gera erro no retornoArquivo. Após a análise, descobri que meu controlador no webapi está herdando o ApiController (system.web.http.api controller). Descobri que não há classe File no ApiController. Existe alguma opção para implementar a funcionalidade de download de arquivos no webapi controller?
Eu tentei o código alternativo abaixo no controlador webapi, mas não consegui ver um arquivo de download quando eu chamo isso.
public HttpResponseMessage DownloadConstructedXmlFile()
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
string xmlContent = "My test xml data";
//var serializer = new XmlSerializer(typeof(xmlContent));
var builder = new StringBuilder();
using (var writer = new StringWriter(builder))
{
// serializer.Serialize(writer, xmlContent);
result.Content = new StringContent(xmlContent, Encoding.UTF8, "application/xml");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = string.Format("test.xml")
};
// return result;
}
return new HttpResponseMessage();
}
PS: Estou tentando usar o código angularjs para chamar essa API por meio do serviço angular. Isso é chamado ao clicar no botão de download. Qualquer código angular de amostra ou ajuda no código ou sugestões do controlador da API seria útil.