我正在研究服务器端的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'。”
知道我遗失了什么吗?
答案 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在幕后使用wkhtmltopdf或iTextSharp。
wkhtmltopdf和wkhtmltoimage是开源(LGPLv3)命令行 使用QT将HTML呈现为PDF和各种图像格式的工具 Webkit渲染引擎。这些完全是&#34;无头&#34;也不要 需要显示或显示服务。
此外,您无法使用AJAX下载文件,您应该使用简单的HTML <form>
。
还有RazorEngine - 一个基于你可以使用的Razor解析器的模板引擎。