2015-06-16 37 views
1

我正在使用服務器端的Web API和客戶端上的angularjs進行項目工作。其中一個要求是根據一些參數從數據庫中檢索數據並以csv和pdf格式導出。我們正在使用異步/等待模式。我對Web API和angularjs很陌生,在這個方向上沒有找到好的資源。任何人都可以提出任何有助於我開始朝正確方向發展的建議嗎?使用WEB API和angularjs導出CSV格式的PDF格式的數據

到目前爲止,這是我做的,但沒有成功獲得所需的輸出。

// 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頭。推斷的媒體類型‘應用程序/八位字節流’不支持這種資源。」

任何想法,我失去了什麼?

回答

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後,你可能會發現有用的註冊。

個人而言,我只想補充剃刀的觀點,並返回它們作爲返回這似乎是與HttpResponseMessage和ASP.NET MVC中的ActionResult機制跨HTTP消息出臺 IHttpActionResult的Web API。

更多詳情:

那麼也許你可以使用Rotativa它採用wkhtmltopdf引擎蓋或iTextSharp下。

wkhtmltopdf和wkhtmltoimage是開放源碼(LGPLv3)的命令行工具 使用QT WebKit渲染引擎來渲染HTML到PDF和各種圖像格式。這些運行完全「無頭」,並且不要求 需要顯示或顯示服務。

此外,您不能使用AJAX下載文件,您應該使用簡單的HTML <form>

還有RazorEngine - 基於Razor解析器的模板引擎,您可以使用它。