使用WEB API和angularjs

时间:2015-06-16 11:21:55

标签: angularjs asp.net-web-api export-to-csv

我正在研究服务器端的Web API和客户端的angularjs项目。其中一个要求是根据某些参数从数据库中检索数据,并以csv和pdf格式导出。我们正在使用async / await模式。我是Web API和angularjs的新手,并没有找到这个方向的好资源。任何人都可以提出任何可以帮助我开始正确方向的建议吗?

到目前为止,这是我所做的,但没有成功获得所需的输出。

// This is WEB API method
[HttpGet]
[Authorize]
[Route("ExportAppData")]
public IHttpActionResult ExportAppData()
{
    List<App> apps = _appRepository.GetAllApps();
    string csvData = ConvertToCSV(apps);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StringContent(csvData);
    result.Content.Headers.ContentType = new   MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentDisposition = new    ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "file.csv";
    return Ok(result);
}

// This is angularjs function call to call the above method
function exportAppData() {
        return $http(
            {url: 'api/Apps/ExportAppData', 
            method: "GET",
            headers: {'Content-Type': 'application/octet-stream'}
            }
            );
    }

当我跑步时,我收到一条错误消息 “请求包含实体主体但没有Content-Type标头。此资源不支持推断的媒体类型'application / octet-stream'。”

知道我遗失了什么吗?

1 个答案:

答案 0 :(得分:1)

您需要自定义MediaTypeFormatter

阅读详情:ASP.NET Web API Series - Part 5: MediaTypeFormatter explained

然后在WebApiConfig.cs中注册它

config.Formatters.Add(new PdfMediaTypeFormatter());

您可能会发现Create PDF’s with ASP.NET Web Api帖子有用。

我个人只会添加剃刀视图并将其作为Web API引入 IHttpActionResult用于返回似乎是HttpResponseMessage和ASP.NET MVC中的ActionResult机制之间交叉的HTTP消息。

阅读更多内容:

然后,也许你可以使用Rotativa在幕后使用wkhtmltopdfiTextSharp

  

wkhtmltopdf和wkhtmltoimage是开源(LGPLv3)命令行   使用QT将HTML呈现为PDF和各种图像格式的工具   Webkit渲染引擎。这些完全是&#34;无头&#34;也不要   需要显示或显示服务。

此外,您无法使用AJAX下载文件,您应该使用简单的HTML <form>

还有RazorEngine - 一个基于你可以使用的Razor解析器的模板引擎。